역사적 관점
미래에 새로운 패러다임이 어떻게 될지 말하기는 불가능합니다. 예를 들어 Ken Kennedy의 Rise and Fall of HPF를 읽는 것이 좋습니다 . Kennedy는 MPI와 스마트 컴파일러의 두 가지 새로운 패턴에 대해 설명하고 MPI가 어떻게 초기 얼리 어답터를 적절하게 지배하고 유연성을 발휘했는지 자세히 설명합니다. HPF는 결국 문제를 해결했지만 너무 늦었습니다.
여러 가지면에서 PGAS 및 OpenMP와 같은 여러 패러다임이 동일한 HPF 추세를 따르고 있습니다. 초기 코드는 유연하게 사용할 수 없었으며 테이블에서 많은 성능을 남겼습니다. 그러나 병렬 알고리즘의 모든 iota를 작성할 필요가 없다는 약속은 매력적인 목표입니다. 따라서 항상 새로운 모델을 추구하고 있습니다.
하드웨어의 명확한 추세
이제 MPI의 성공은 종종 그것이 실행되는 하드웨어를 모델링하는 방법과 밀접한 관련이 있다고 언급되었습니다. 대략 각 노드에는 몇 개의 프로세스가 있으며 메시지를 로컬 지점 간 또는 조정 된 일괄 작업을 통해 클러스터 공간에서 쉽게 전달할 수 있습니다. 이 때문에 새로운 하드웨어 트렌드를 따르지 않는 패러다임을주는 사람을 믿지 않습니다. 실제로 Vivak Sarakar 의 연구를 통해이 의견을 확신 했습니다 .
이를 유지하기 위해 새로운 아키텍처로 나아가는 세 가지 트렌드가 있습니다. HPC 에는 현재 12 개의 서로 다른 아키텍처가 판매되고 있습니다. 5 년 전만해도 x86 만 제공되므로 앞으로는 다양하고 흥미로운 방법으로 하드웨어를 사용할 수있는 많은 기회를 보게 될 것입니다
- 특수 목적 칩 : 가속기와 같은 큰 벡터 장치를 생각하십시오 (Nvidia의 Bill Dally가지지 함).
- 저전력 칩 : ARM 기반 클러스터 (전력 예산을 수용하기 위해)
- 칩 타일링 : 사양이 다른 칩 타일링을 생각하십시오 ( Avant Argwal의 작품 )
현재 모델
현재 모델의 깊이는 실제로 3 단계입니다. 이러한 레벨 중 두 가지를 사용하는 코드는 많지만 세 가지를 모두 사용하는 코드는 많지 않습니다. 먼저 엑사 스케일에 도달하려면 코드가 세 가지 레벨 모두에서 실행될 수 있는지 결정하는 데 투자해야한다고 생각합니다. 이것은 현재 추세를 잘 반복 할 수있는 가장 안전한 경로 일 것입니다.
예측 된 새 하드웨어 뷰를 기반으로 모델과 모델 변경 방법에 대해 반복하겠습니다.
분산
분산 수준의 플레이어는 주로 MPI 및 PGAS 언어에 속합니다. MPI는 현재 확실한 승자이지만 UPC 및 Chapel과 같은 PGAS 언어는 우주로 향하고 있습니다. 좋은 지적 중 하나는 HPC 벤치 마크 챌린지입니다. PGAS 언어는 매우 우아한 벤치 마크 구현을 제공합니다.
여기서 가장 흥미로운 점은이 모델이 현재 노드 수준에서만 작동하지만 Tiled 아키텍처의 경우 노드 내부에서 중요한 모델이 될 것입니다. 기본적으로 분산 시스템처럼 작동하는 Intel SCC 칩이 있습니다. SCC 팀은 자체 MPI 구현을 만들었으며 많은 팀이 커뮤니티 라이브러리를이 아키텍처로 이식하는 데 성공했습니다.
그러나 솔직히 말해서 PGAS는 실제로이 분야에 뛰어 들기위한 좋은 이야기가 있습니다. 실제로 MPI 인터 노드를 프로그래밍하고 동일한 트릭 인트라 노드를 수행해야합니까? 이러한 타일 구조의 한 가지 큰 문제는 칩에서 클럭 속도가 다르고 메모리 대역폭에 큰 차이가 있으므로 성능 코드가이를 고려해야한다는 것입니다.
온 노드 공유 메모리
여기서는 MPI가 종종 "충분히 좋은"것으로 보이지만 PThreads (및 Intel Parallel Building Blocks와 같은 PThread에서 파생 된 라이브러리) 및 OpenMP는 여전히 자주 사용됩니다. 일반적인 관점은 MPI의 소켓 모델이 RPC에 대해 분류 할 공유 메모리 스레드가 충분할 때가 있거나 코어에서 더 가벼운 프로세스가 필요하다는 것입니다. 이미 공유 메모리 MPI에 문제가있는 IBM Bluegene 시스템의 표시를 볼 수 있습니다.
Matt가 언급했듯이 계산 집약적 코드의 최대 성능 향상은 직렬 코드의 벡터화입니다. 많은 사람들이 액셀러레이터에서 이것이 사실이라고 가정하지만 온 노드 시스템에도 중요합니다. Westmere에는 4 개의 넓은 FPU가 있다고 생각하므로 벡터화 없이도 1/4의 플롭을 얻을 수 있습니다.
현재 OpenMP 가이 공간으로 잘 들어가는 것을 보지 못하지만 저전력 또는 타일 칩이 더 가벼운 스레드를 사용할 수있는 곳이 있습니다. OpenMP는 데이터 흐름이 작동하는 방식을 설명하는 데 어려움을 겪고 있으며 더 많은 스레드가 사용됨에 따라이 추세가 과장된 것을 볼 수 있습니다. OpenMP를 사용하여 적절한 프리 페치를 얻기 위해 수행해야하는 작업의 예를 살펴보십시오.
물론 충분한 수준의 OpenMP 및 PThreads는 피크의 비율을 높이는 데 필요한 벡터화를 활용할 수 있지만 그렇게하려면 벡터화가 자연스럽게 알고리즘을 분해해야합니다.
코 프로세서
마지막으로 코 프로세서 (GPU, MIC, Cell acclerators)의 출현이 막을 내렸다. 엑 사스케 일로가는 길은 그들 없이는 완성 될 수 없다는 것이 분명 해지고 있습니다. SC11에서는 모든 Bell 상을 수상한 참가자들이 페타 플롭이 낮은 곳까지 매우 효과적으로 사용했습니다. CUDA와 OpenCL이 현재 시장을 지배하고 있지만 OpenACC 및 PGAS 컴파일러가이 시장에 진입하기를 희망합니다.
엑사 스케일에 도달하기 위해, 하나의 제안은 저전력 칩을 많은 코 프로세서에 결합하는 것이다. 이것은 현재 스택의 중간 계층을 제거하고 메인 칩의 의사 결정 문제를 관리하고 코 프로세서로의 작업을 섞는 코드를 사용합니다. 이것은 코드가 매우 효과적으로 작동하기 위해서는 커널 (또는 코드 렛) 측면에서 알고리즘을 다시 생각해야한다는 것입니다. 내가 아는 한,이 진화에 대한 해결책은 꽤 넓습니다.
이것이 앱 개발자에게 미치는 영향
이제 귀하의 질문에 도달하십시오. 다가오는 엑사 스케일 머신으로부터 자신을 보호하려면 몇 가지 작업을 수행해야합니다.
- 3 단계 이상의 병렬 계층 구조에 맞도록 알고리즘을 개발하십시오.
- 계층 구조간에 이동할 수있는 커널 측면에서 알고리즘을 설계하십시오.
- 순차적 프로세스에 대한 필요성을 완화하십시오. 동기식 실행이 불가능하기 때문에 이러한 모든 효과는 비동기식으로 발생합니다.
오늘 공연을하고 싶다면 MPI + CUDA / OpenCL만으로도 충분하지만 UPC는 며칠이 걸리고 배우는 나쁜 생각이 아닙니다. OpenMP를 시작하면 코드를 리팩터링해야하는 문제가 발생합니다. PThreads는 코드를 스타일에 맞게 완전히 다시 작성해야합니다. MPI + CUDA / OpenCL을 현재 최고의 모델로 만듭니다.
여기서 다루지 않은 것
엑사 스케일에 대한이 모든 이야기는 훌륭하지만 여기서 실제로 논의되지 않은 것은 머신에 데이터를주고받는 것입니다. 메모리 시스템에 많은 발전이 있었지만, 우리는 상품 클러스터에서 그것들을 보지 못했습니다 (너무 비싸다). 이제 데이터 집약적 컴퓨팅이 모든 슈퍼 컴퓨팅 컨퍼런스의 큰 초점이되고 있으므로 높은 메모리 대역폭 공간으로의 이동이 더 커질 것입니다.
이로 인해 발생할 수있는 다른 추세가 발생합니다 (적절한 자금 지원 기관이 관여하는 경우). 기계는 필요한 컴퓨팅 유형에 점점 더 전문화 될 것입니다. 우리는 이미 NSF가 "데이터 집약적 인"머신에 자금을 지원하고 있지만이 머신은 2019 Exascale Grand Challenge와는 다른 트랙에 있습니다.
이것은 주석에서 필요한 참조를 요청하는 것보다 오래되었습니다.