답변:
떠 다니는 많은 모델이 있지만 가장 두드러지는 모델은 다음과 같습니다.
지난 달 DIMACS 에서이 주제에 대한 워크샵 이있었습니다. 초록을 숙독하면 더 많은 정보를 얻을 수 있습니다.
내 답변의 블로그 게시물 형식에 대해 미리 사과드립니다. 병렬 컴퓨팅 세계에 대한 작은 개요를 만드는 데 도움을 줄 수 없었습니다.
병렬 프로그래밍 모델을 제어 흐름과 데이터 흐름 모델의 두 가지 범주로 분류 할 수 있습니다.
제어 흐름 모델은 기본적으로 모든 프로그램 컴퓨터 오늘, 명시적인 제어 프로그램의 컨텍스트 내에서 병렬 작업을하려고합니다. 해결해야 할 근본적인 문제는 이러한 'Von Neumann 아키텍처'가 병렬 실행 용이 아니라 효율적인 순차적 계산을 위해 설계되었다는 것입니다. 이러한 맥락에서 병렬 처리는 기본 모듈의 일부 (메모리, 제어, 산술)를 복제하여 얻습니다.
산술 만 중복하면 SIMD 명령어가 제공되므로 모든 ALU는 동일한 프로그램 카운터 (PC)를 공유하므로 다른 데이터에도 불구하고 항상 동일한 작업을 병렬로 실행합니다.
ALU와 PC를 복제하지만 명령 시퀀서를 제어 장치 내에 유지하면 파이프 라인 병렬 처리를 수행하는 OoO (Out of Order)가 실행됩니다. 이 범주에는 VLWI (Very Long Instruction Word) 및 분기 예측 기법도 있습니다. 소프트웨어 수준에서는이 범주를 거의 볼 수 없습니다.
조금 더 나아가면 전체 '코어'가 복제되지만 메모리를 공유하는 것은 작업 (또는 스레드) 병렬 처리를 제공하는 현재 멀티 코어 프로세서입니다. 이러한 맥락에서 메모리를 공유하면 매우 어렵고 미묘한 동시성 문제가 발생 합니다. 따라서 현재 멀티 코어에서의 병렬 계산은 동기화 / 동시성 문제, 신중한 성능 균형 (비 동기화) 및 원하는 의미론 (완전히 동기화 된 순차적 실행 의미론)을 중심으로 완전히 회전합니다. 이것의 예는 PRAM이거나 요즘 포크 / 조인 ( IntelBB , Java.Utils.Concurrency) 과 같은 촬영 의 Cilk). CSP 및 Actor 모델은 동시성 모델이지만 위에서 언급 한 것처럼 동시 메모리 및 병렬 처리는 공유 메모리 환경에서 흐리게 표시됩니다. nb 병렬 처리는 올바른 의미를 유지하기위한 성능, 동시성입니다.
메모리 복제도 MPI 및 그 ilk로 프로그래밍 된 네트워크 컴퓨터 또는 칩-온 프로세서 (cloud-on-a-chip) 프로세서 (클라우드 프로세서, Transputer, Tilera)와 같은 이상한 비 Von Neumann 아키텍처를 제공합니다. UMA 또는 NUMA 와 같은 메모리 모델 은 공유 메모리의 환상을 유지하려고 시도하며 소프트웨어 또는 하드웨어 수준에서 존재할 수 있습니다. MPI는 프로그램 수준의 병렬 처리를 유지하고 메시지 전달을 통해서만 통신합니다. 메시지 전달은 통신 및 동시성 (전송기)을 위해 하드웨어 수준에서도 사용됩니다.
두 번째 범주는 데이터 흐름 모델 입니다. Von Neumann 설계를 피하면서 병렬 계산을 작성하고 실행하는 방법으로 컴퓨터 시대의 초기에 설계되었습니다. 이들은 순차적 성능이 기하 급수적으로 상승한 후 80 년대에 유행 (병렬 컴퓨팅 용)에서 떨어졌습니다. 그러나 Google MapReduce, Microsoft의 Dryad 또는 Intel의 Concurrent Collections와 같은 많은 병렬 프로그래밍 시스템은 실제로 데이터 흐름 계산 모델입니다. 어떤 시점에서 그들은 계산을 그래프로 나타내고 실행을 안내하는 데 사용합니다.
모델의 일부를 지정하면 데이터 흐름 모델에 대해 서로 다른 범주 및 의미를 얻을 수 있습니다. 그래프의 모양을 DAG (CnC, Dryad), 트리 (mapreduce), digraph로 제한합니까? 엄격한 동기화 의미 체계가 있습니까 ( Luster)반응 형 프로그래밍]? 정적 스케줄 (StreaMIT)을 가질 수있는 재귀를 허용하지 않거나 동적 스케줄러 (Intel CnC)를 사용하여보다 표현력을 제공합니까? 수신 또는 발신 에지 수에 제한이 있습니까? 들어오는 의미의 하위 집합이 사용 가능한 경우 firing semantics가 노드를 실행할 수 있습니까? 데이터의 에지 스트림 (스트림 처리) 또는 단일 데이터 토큰 (정적 / 동적 단일 할당)입니다. 관련 작업의 경우 Arvind, K. Kavi, j. Sharp, W. Ackerman, R. Jagannathan 등
편집 : 완전성을 위해. 병렬 축소 구동 및 패턴 구동 모델도 있습니다. 축소 전략의 경우 크게 그래프 축소 및 문자열 축소가 있습니다. Haskell은 기본적으로 순차 공유 메모리 시스템에서 매우 효율적인 전략 인 그래프 축소를 사용합니다. 문자열 축소 복제는 작동하지만 암시 적으로 병렬 처리하는 데 더 적합한 개인 메모리 속성이 있습니다. 패턴 중심 모델은 동시 프롤로그와 같은 병렬 논리 언어입니다. 액터 모델은 패턴 중심 모델이지만 개인 메모리 특성이 있습니다.
추신. 나는 '모델'이라는 용어를 공식적이고 프로그래밍 목적으로 추상 기계를 포괄하여 광범위하게 사용합니다.
메시지 전달 아키텍처의 경우 BSP와 매우 유사하지만 실제 시스템에서 실제로 얻는 것과 가까운 성능 분석 및 다루기 쉬운 모델은 확실히 CGM 또는 Coarse Grained Multicomputer입니다. Frank Dehne이 제안한 것으로이 맥락에서 개발 된 알고리즘을 제시하는 흥미로운 논문이 많이 있습니다.
CGM은 p 프로세서 (각각 O (n / p) 로컬 메모리와 입력 n의 크기가 p보다 훨씬 큰 (크기 차수), 즉 p≪n)를 가정하여 대략적인 아키텍처에 적합합니다. 따라서 모델은 현재 아키텍처에서 다른 모델보다 훨씬 잘 매핑됩니다. 그것은 광범위하게 연구되었습니다. 이 모델은 다음 가정을 기반으로합니다. (i) 알고리즘은 소위 수퍼 스텝을 실행합니다.이 단계는 로컬 계산의 한 단계와 중간 장벽 동기화를 통한 한 단계의 프로세서 간 통신으로 구성됩니다. (ii) 모든 p 프로세서는 O (n / p) 로컬 메모리, (iii) 각 수퍼 스텝에서 프로세서는 최대 O (n / p) 요소를 송수신 할 수 있으며 (iv) 프로세서 간의 통신 네트워크는 임의적 일 수 있습니다. 이 모델에서, 알고리즘은 계산 시간 및 통신 라운드 수로 평가됩니다. 모델은 단순하지만 병렬 알고리즘의 실제 성능에 대한 합리적인 예측을 제공합니다. 실제로, CGM에 대한 병렬 알고리즘은 일반적으로 CGM을 구현하고 벤치마킹 할 때 실험적으로 결정된 실제 시간과 매우 유사한 이론적 복잡도 분석을 갖습니다.
병렬 외부 메모리 (PEM) 는 PRAM 스타일 공유 메모리 시스템과 외부 메모리 모델의 자연스러운 조합입니다. 개인 캐시의 의미에 중점을 둡니다.
내가 아는 바로는 오늘날 BSP 및 LogP 모델은 분산 알고리즘에 사용됩니다. 또한 GPU 컴퓨팅 이후 PRAM은 다시 인기를 얻었지만 분석에 메모리 계층을 포함해야합니다. PRAM에 잘 어울리는 UPMH 모델 (Uniform Parallel memory hierarchy)을 확인할 수 있습니다.
B. Alpern, L. Carter, E. Feig 및 T. Selker. 균일 한 메모리 계층 계산 모델. Algorithmica, 12 : 72–109, 1994. 10.1007 / BF01185206.
Bowen Alpern, Larry Carter 및 Jeanne Ferrante. 병렬 컴퓨터를 메모리 계층으로 모델링 In In Proc. 대규모 병렬 컴퓨터의 프로그래밍 모델, 116–123 페이지. IEEE Computer Society Press, 1993.
또한 GPU 컴퓨팅의 경우 이론적 인 컴퓨팅 모델에 대한 제안이있었습니다. K 모델 :
Gabriele Capannini, Fabrizio Silvestri 및 Ranieri Baraglia. K- 모델 : 스트림 프로세서를위한 새로운 계산 모델. 고성능 컴퓨팅 및 통신에 관한 2010 년 IEEE 제 12 회 국제 컨퍼런스, HPCC '10, 239–246 페이지, 워싱턴 DC, 미국, 2010 년 진행. IEEE Computer Society.
마지막으로, 병렬 컴퓨터로 모델링 된 셀룰러 오토마타 (CA)를 보았습니다. 개인적으로 이것은 매우 흥미로운 연구 주제라고 생각합니다. 미래의 프로세서는 계산 공간이 거의없는 이런 식으로 만들어 질 것입니다. 나는 이것에 대한 확실한 참조가 없지만 웹을 볼 수 있습니다.
순전히 기능적인 프로그램은 독립적 인 표현의 병렬 실행을 허용합니다. 따라서 나는 그것들을 병렬 계산 모델로 계산할 것입니다.
나는 Bader-Jaja 접근법을 선호한다 (2.1 참조). 메시지 전달 문제로 복잡성을 모델링합니다. 전송 된 각 메시지마다 통신을 시작하기위한 대기 시간 변수와 대역폭 변수가 있습니다.
구체적으로 클라우드 컴퓨팅에 대해 언급합니다. 이 지역에 불과 몇 년 강렬한 혁신 안에있어왔다 아마존 탄성 컴퓨팅 클라우드, 구글 애플리케이션 엔진 및 다양한 도구 및 관련 개념 병렬 처리 "모델".
특별한 오픈 소스 툴에는 구글의 Mapreduce , Apache Hadoop 및 NoSQL 데이터베이스가 포함되어 있습니다.이 데이터베이스는 병렬화 알고리즘 "모범 사례"및 "디자인 패턴"에서 새롭고 강력하며 널리 채택 된 표준으로 부상하고 있습니다. 또한 memcacheD 는 점점 메모리 내 분산 데이터베이스로 사용되고 있습니다. 이에 대한 예는 최근 논문 [1]에 설명 된 Facebook에서 사용되고 있습니다.
[1] Berezecki et al의 많은 핵심 키-값 저장소
이것에 대한 또 다른 각도. 분명히 이것은 일부 사람들에게는 다소 모호하거나 프린지로 여겨 질 수 있지만, 일반적으로 병렬 알고리즘에 다소 자연적으로 적합하다고 주장되는 확률 론적 알고리즘을 병렬화하는 작업이 있습니다.
예를 들어 워크 스테이션 클러스터의 병렬 확률 계산 Radenski, Vann, Norris를 참조하십시오.
확률 알고리즘은 다루기 어려운 문제를 해결하기 위해 계산 집약적 인 근사법입니다. 확률 알고리즘은 통신 및 동기화가 거의 필요하지 않기 때문에 클러스터 계산의 훌륭한 후보입니다. 확률 적 클러스터 계산을위한 일반적인 알고리즘으로 공통 병렬 제어 구조 를 지정할 수 있습니다 . 이러한 일반적인 병렬 알고리즘은 도메인 별 순차적 알고리즘과 결합하여 서로 다른 다루기 어려운 문제에 대한 대략적인 병렬 솔루션을 도출 할 수 있습니다. 본 논문에서는 워크 스테이션 클러스터에서 확률 계산을위한 일반적인 알고리즘을 제안한다. 우리는이 일반적인 알고리즘을 사용하여 배낭 문제와 이동 영업 사원 문제라는 두 가지 개별 최적화 문제에 대한 특정 병렬 알고리즘을 도출합니다.
명확하지 않은 경우 확률 론적 계산과 함께 참조되는 "일반 알고리즘으로 일반적인 병렬 제어 구조"및 전체 변환은 "모델"입니다.
확률 론적 계산은 엄격하게 고전적인 컴퓨팅이나 튜링이 아니라고 주장 할 수있다. 따라서 병렬 계산에서 특히 확률 계산과 고전을 묶는 작업이 있습니다.
Rao의 확률 적 병렬 프로그램 에 대한 추론 :
알고리즘의 설계 및 분석에서 무작위 화를 사용하면 어려운 문제에 대해 간단하고 효율적인 알고리즘을 약속하며, 그 중 일부는 결정적 솔루션이 없을 수 있습니다. 이러한 단순성, 효율성 및 용해성의 향상은보다 정량적 인 개념에 대한 알고리즘의 절대 정확성이라는 전통적인 개념과의 균형을 이룹니다. 확률은 0과 1 사이의 정확성입니다. 이미 직관적이지 않은 병렬성 개념 추가 무작위 배정이라는 개념은 확률 론적 병렬 프로그램에 대한 추론을 더욱 비참하고 어렵게 만든다. 이 논문에서 우리는 결정 론적으로 또는 확률 1로 유지되는 확률 적 병렬 프로그램의 특성을 지정하고 도출하는 문제를 다룬다.
물론 QM 컴퓨팅은 확률 론적 컴퓨팅 ( Fortnow의 Quantum Computing에 대한 One Complexity Theorist의 견해 를 강조하는 좋은 참고)과 매우 유사하며 이러한 접근 방식이 병렬 QM 시뮬레이션 작업에서 확장 될 수 있다는 힌트가 있습니다.
이것은 일부 사람들에 의해 논란의 여지가있는 것으로 간주 될 것이며,이 각도의 지지자들조차 연구 초기 단계에서이를 인정해야 할 것이지만, 기본적으로 양자 컴퓨팅 은 병렬 처리와 병렬 계산과 많은 관련이있는 것으로 보입니다. 참고 문헌은 현재 흩어져 있지만 결정적인 연구원이 떠오르는 주제를 볼 수 있습니다.
어쩌면 가장 좋은 연결은 Grovers 검색 알고리즘 과 관련이있을 수 있는데, 이는 최근 대부분의 NP 완료 문제에 대한 속도 향상에 사용할 수 있다는 의미에서 더 일반적으로 나타났습니다 [5]. 그로버 알고리즘은 병렬 데이터베이스 검색 알고리즘과 강력한 유추 / 연결이있는 것 같습니다. 가장 고전적인 직렬 알고리즘은 동일한 성능을 충족 할 수 없지만, 적어도 하나의 기관은 최근 검색에 대한 QM 접근 방식이 실제로 병렬화 된 고전 알고리즘보다 성능이 우수하지 않다고 주장합니다. [1]
추가 증거는 양자 검색에서 병렬성을 명시 적으로 보는 체계이다 (예 : [2]). 또한 병렬 / 분산 처리를 기반으로하는 양자 시뮬레이터 (들)가 제안되었으며 [3] [4]이 체계가 잘 맞고 효율적이고 다루기 쉬운 시뮬레이션 (30 큐 비트가 참조 [3]에서 시뮬레이션 됨)으로 이어지기 때문에이 변환은 이는 단지 우연의 일치 일뿐만 아니라 병렬 클래식 컴퓨팅과 QM 컴퓨팅 사이의 더 깊은 다리를 나타내지 만 지금까지 밝혀지지 않았을 것입니다.
[1] 양자 검색은 실용적입니까? Viamontes 등
[2] Wu / Dian의 병렬 식 단일 차별 체계 에 의한 정확한 양자 검색
[3] Imai의 Matsumoto, Niwa의 양자 컴퓨팅 용 범용 병렬 시뮬레이터 .
[4] Beals et al 2012의 효율적인 분산 양자 컴퓨팅
[5] Furer 2008의 양자 검색 으로 NP 전체 문제 해결