계산을위한 현재 병렬 모델


30

1980 년대는 병렬 계산 의 PRAM 모델 과 BSP 모델 을 모두 일으켰습니다 . 두 모델의 전성기가 80 년대 후반과 90 년대 초반 인 것으로 보입니다.

이 영역들이 병렬 알고리즘에 대한 연구 측면에서 여전히 활발한가? 병렬 계산을위한 더 정교한 모델이 있습니까? 일반 모델이 여전히 유행에 있습니까? 아니면 연구원이 GPGPU 또는 클라우드 기반 컴퓨팅을 전문으로하려고합니까?

답변:


19

떠 다니는 많은 모델이 있지만 가장 두드러지는 모델은 다음과 같습니다.

  1. MUDMapReduce는 더 일반적 MapReduce의 프레임 워크에 대해 주로 포착하지만, 계산 모델은 병렬 분포 모델로 간주 될 수있다
  2. 제안 된 다양한 멀티 코어 모델 (그러나 아직 표준은 아닙니다)

지난 달 DIMACS 에서이 주제에 대한 워크샵 이있었습니다. 초록을 숙독하면 더 많은 정보를 얻을 수 있습니다.


DIMAC 워크샵은 훌륭합니다! 고맙습니다.
Nicholas Mancuso

3
2009 년 umiacs.umd.edu/conferences/tmc2009 의 초기 워크숍이 있었는데 , 최근 DIMAC보다 훨씬 예리한 것으로 보였습니다. 레슬리 발리언트 (Leslie Valiant)는 올해 워크샵에서 더 자세히 논의 된 Multi-BSP 모델을 소개했으며, 인텔의 Phil Gibbons는 도발적인 대화 이론을 발표 했다. 저에게 DIMAC 워크샵은 MapReduce에 너무 집중되어 Google은 더 이상 웹 색인 작성에 사용하지 않습니다.
András Salamon

사실입니다. 나는 이전의 것을 잊었다.
Suresh Venkat

22

내 답변의 블로그 게시물 형식에 대해 미리 사과드립니다. 병렬 컴퓨팅 세계에 대한 작은 개요를 만드는 데 도움을 줄 수 없었습니다.

병렬 프로그래밍 모델을 제어 흐름과 데이터 흐름 모델의 두 가지 범주로 분류 할 수 있습니다.

제어 흐름 모델은 기본적으로 모든 프로그램 컴퓨터 오늘, 명시적인 제어 프로그램의 컨텍스트 내에서 병렬 작업을하려고합니다. 해결해야 할 근본적인 문제는 이러한 '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은 기본적으로 순차 공유 메모리 시스템에서 매우 효율적인 전략 인 그래프 축소를 사용합니다. 문자열 축소 복제는 작동하지만 암시 적으로 병렬 처리하는 데 더 적합한 개인 메모리 속성이 있습니다. 패턴 중심 모델은 동시 프롤로그와 같은 병렬 논리 언어입니다. 액터 모델은 패턴 중심 모델이지만 개인 메모리 특성이 있습니다.

추신. 나는 '모델'이라는 용어를 공식적이고 프로그래밍 목적으로 추상 기계를 포괄하여 광범위하게 사용합니다.


mapreduce가 나무를 어떻게 형성하는지 이해하지 못합니다. 설명해 주시겠습니까?
Riko Jacob

@Riko Jacob은 '+'를 (1 2 3 4)에 매핑한다고 가정하면 개념적으로 각 노드에 '+'와 각 숫자가 잎으로 표시된 응용 프로그램 트리를 만듭니다. 축소 (또는 haskel에서 접는 경우)는 하위 노드의 데이터로 각 노드를 축소합니다.
쇠고기

K2,2

그래프 자체 생성을 고려하지 않으면 (예 : a, b를 키 / 베일 쌍에 매핑) 약간의 영업권으로 축소를 수행하는 두 개의 트리를 얻습니다.) 아마도 더 연결된 k 또는 격자 그래프 일 수 있습니다 당신이 말한대로. 당신은 그것이 단순한 나무보다 조금 더 일반적이라는 것이 맞습니다. 더 일반적인 DAG 데이터 흐름 구조를 구별하려고했습니다.
쇠고기

8

메시지 전달 아키텍처의 경우 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을 구현하고 벤치마킹 할 때 실험적으로 결정된 실제 시간과 매우 유사한 이론적 복잡도 분석을 갖습니다.



4

내가 아는 바로는 오늘날 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)를 보았습니다. 개인적으로 이것은 매우 흥미로운 연구 주제라고 생각합니다. 미래의 프로세서는 계산 공간이 거의없는 이런 식으로 만들어 질 것입니다. 나는 이것에 대한 확실한 참조가 없지만 웹을 볼 수 있습니다.


3

순전히 기능적인 프로그램은 독립적 인 표현의 병렬 실행을 허용합니다. 따라서 나는 그것들을 병렬 계산 모델로 계산할 것입니다.


함수형 프로그래밍과 관련된 특정 비용 모델이 없으므로 질문에 대답하지 않습니다. cstheory.stackexchange.com/questions/376/…
Charles Stewart

2
이러한 람다 미적분학 기반 언어의 평가 메커니즘은 실제 하드웨어에 직접 매핑되지 않는 축소입니다. 이것이 Haskell이 여전히 'par'과 같은 명시적인 병렬 구조를 도입해야하는 이유입니다. 참조 : csg.csail.mit.edu/projects/languages/ph.shtml
쇠고기

3

나는 Bader-Jaja 접근법을 선호한다 (2.1 참조). 메시지 전달 문제로 복잡성을 모델링합니다. 전송 된 각 메시지마다 통신을 시작하기위한 대기 시간 변수와 대역폭 변수가 있습니다.

tumptump


-3

구체적으로 클라우드 컴퓨팅에 대해 언급합니다. 이 지역에 불과 몇 년 강렬한 혁신 안에있어왔다 아마존 탄성 컴퓨팅 클라우드, 구글 애플리케이션 엔진 및 다양한 도구 및 관련 개념 병렬 처리 "모델".

특별한 오픈 소스 툴에는 구글의 Mapreduce , Apache HadoopNoSQL 데이터베이스가 포함되어 있습니다.이 데이터베이스는 병렬화 알고리즘 "모범 사례"및 "디자인 패턴"에서 새롭고 강력하며 널리 채택 된 표준으로 부상하고 있습니다. 또한 memcacheD 는 점점 메모리 내 분산 데이터베이스로 사용되고 있습니다. 이에 대한 예는 최근 논문 [1]에 설명 된 Facebook에서 사용되고 있습니다.

[1] Berezecki et al의 많은 핵심 키-값 저장소


다시. 모델 이나 병렬 계산을 요청합니다 . 도구가 아닙니다. MapReduce는 그러한 모델 중 하나입니다. 그러나 Hadoop과 NoSQL은 그렇지 않습니다. Hadoop은 MapReduce의 Java 기반 통합입니다. NoSQL은 내가 말할 수있는 편안한 키 저장소 모델입니다.
Nicholas Mancuso

MapReduce는 도구로 시작하여 널리 사용 / 채용을 통해 모델로 전환했습니다. 다른 사람들과 동일합니다. 하둡은 MapReduce와 동일하지 않지만 유사 할 수 있습니다. 예, MapReduce가 포함 된 Suresh의 최고 투표 답변에 의해 쫓겨 난 것 같습니다. 사람들은이 사이트의 실제 소프트웨어 패키지를 아무리 많이 사용하든 상관없이 관심을 가지거나 토론하기를 선호하지 않는 것 같습니다. 심지어 그들이 맵리 듀스가했던 것처럼 그들이 나중에 이론 을 고무
시키거나 교차 수분

2
요점은, 당신은 질문에 대답하지 않는다는 것입니다. 여기 주변의 정책은 질문과 접하는 관련 제안이 용인 될 수 없다는 것입니다. 이 정책이 마음에 들지 않으면 참여하지 않을 수 있습니다. 당신이 있다면 실제 아이디어를 실제 병렬 시스템을 모델링하는 방법에 대한, 즉이 (비록 여전히 질문에 대한 답변이 요구되지 않음) 항목에 대한 자세한 것
Sasho 니콜 로프

-3

이것에 대한 또 다른 각도. 분명히 이것은 일부 사람들에게는 다소 모호하거나 프린지로 여겨 질 수 있지만, 일반적으로 병렬 알고리즘에 다소 자연적으로 적합하다고 주장되는 확률 론적 알고리즘을 병렬화하는 작업이 있습니다.

예를 들어 워크 스테이션 클러스터의 병렬 확률 계산 Radenski, Vann, Norris를 참조하십시오.

확률 알고리즘은 다루기 어려운 문제를 해결하기 위해 계산 집약적 인 근사법입니다. 확률 알고리즘은 통신 및 동기화가 거의 필요하지 않기 때문에 클러스터 계산의 훌륭한 후보입니다. 확률 적 클러스터 계산을위한 일반적인 알고리즘으로 공통 병렬 제어 구조 를 지정할 수 있습니다 . 이러한 일반적인 병렬 알고리즘은 도메인 별 순차적 알고리즘과 결합하여 서로 다른 다루기 어려운 문제에 대한 대략적인 병렬 솔루션을 도출 할 수 있습니다. 본 논문에서는 워크 스테이션 클러스터에서 확률 계산을위한 일반적인 알고리즘을 제안한다. 우리는이 일반적인 알고리즘을 사용하여 배낭 문제와 이동 영업 사원 문제라는 두 가지 개별 최적화 문제에 대한 특정 병렬 알고리즘을 도출합니다.

명확하지 않은 경우 확률 론적 계산과 함께 참조되는 "일반 알고리즘으로 일반적인 병렬 제어 구조"및 전체 변환은 "모델"입니다.

확률 론적 계산은 엄격하게 고전적인 컴퓨팅이나 튜링이 아니라고 주장 할 수있다. 따라서 병렬 계산에서 특히 확률 계산과 고전을 묶는 작업이 있습니다.

Rao의 확률 적 병렬 프로그램대한 추론 :

알고리즘의 설계 및 분석에서 무작위 화를 사용하면 어려운 문제에 대해 간단하고 효율적인 알고리즘을 약속하며, 그 중 일부는 결정적 솔루션이 없을 수 있습니다. 이러한 단순성, 효율성 및 용해성의 향상은보다 정량적 인 개념에 대한 알고리즘의 절대 정확성이라는 전통적인 개념과의 균형을 이룹니다. 확률은 0과 1 사이의 정확성입니다. 이미 직관적이지 않은 병렬성 개념 추가 무작위 배정이라는 개념은 확률 론적 병렬 프로그램에 대한 추론을 더욱 비참하고 어렵게 만든다. 이 논문에서 우리는 결정 론적으로 또는 확률 1로 유지되는 확률 적 병렬 프로그램의 특성을 지정하고 도출하는 문제를 다룬다.

물론 QM 컴퓨팅은 확률 론적 컴퓨팅 ( Fortnow의 Quantum Computing에 대한 One Complexity Theorist의 견해 를 강조하는 좋은 참고)과 매우 유사하며 이러한 접근 방식이 병렬 QM 시뮬레이션 작업에서 확장 될 수 있다는 힌트가 있습니다.


-6

이것은 일부 사람들에 의해 논란의 여지가있는 것으로 간주 될 것이며,이 각도의 지지자들조차 연구 초기 단계에서이를 인정해야 할 것이지만, 기본적으로 양자 컴퓨팅 은 병렬 처리와 병렬 계산과 많은 관련이있는 것으로 보입니다. 참고 문헌은 현재 흩어져 있지만 결정적인 연구원이 떠오르는 주제를 볼 수 있습니다.

어쩌면 가장 좋은 연결은 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 전체 문제 해결


@ vnz, 이것은 기껏해야 개념 양자의 임의의 hodge-podge 인 것 같습니다. 인터넷 검색 "병렬 양자"및 여기에 결과를 나열하는 것은 저와 이것을 읽는 다른 사람들에게 소용이 없습니다. 나는 평판 포인트를 열광적으로 만드는 것보다 편안하고 지식이 풍부한 답변에 대해 커뮤니티가 실제로 응답하는 것이 더 낫다고 생각합니다. 양자 계산을 병렬 검색으로 생각하는 것은 비 구조적이며 어쩌면 불분명합니다. 양자 계산은 설명을 사용하기 위해 병렬이 아닌 확률 적 검색으로 "강력한 유사성 / 연결"을 사용합니다.
Nicholas Mancuso

나는 교실에서 교리가 무엇을 가르치고 있는지 알지 못하지만 누군가가 실제로 단순한 고전적 계산보다는 오히려 고전 고전 계산을 달성하는 QM의 지금까지 밝혀지지 않은 통신에 대한 타당성이없는 이유를 나타내는 참조가 있습니다 .... 나는 읽을 것입니다. 그것. QM 컴퓨팅은 ala / eg shor factoring과 같은 정확한 답변을 반환합니다. 교과서에 포함되어 있지 않기 때문에 허허입니다!
vzn

양자 컴퓨팅에 관한 전체 무료 과정이 여기에 있습니다 : coursera.org 그것은 당신을 위해 일을 명확히 할 수 있습니다.
Nicholas Mancuso

"hodgepodge"에 대한 ps ... 실제로
REFS를 읽으

1
(6.) 귀하의 참조. [5] 양자 계산에서 원하는 병렬 처리를 다루지 않고 Grover 알고리즘을 확장하는 방법을 설명합니다. 요약 : 양자 계산과 병렬 계산 사이에 연결이 있다는 해석은 QM의 많은 세계 해석에서 비롯된 것 같습니다. 모호하지는 않지만 논란의 여지가 없으며, 우리 계산을 볼 수없는 정도를 제외하고 양자 계산을 "병렬로 계산"으로 생산적으로 묘사 할 수 는 없습니다. 그들의 존재.
Niel de Beaudrap
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.