왜 MPI 보다 더 열심히 간주 공유 메모리고 얼랑으로 할 때,그들은 모두 메시지 전달?

StackOverflow https://stackoverflow.com/questions/185444

문제

의 많은 관심을 이 일에 얼랑으로 언어 쓰기를 위한 병렬 프로그램이 멀티 코어입니다.내가 들어라고 말하는 사람들이 얼랑의 메시지를 전달하는 모델은 쉽게 프로그램보다는 지배적인 공유 메모리 모형과 같은 스레드입니다.

반대로,고성능 컴퓨팅 커뮤니티 지배적인 병렬 프로그래밍 모델이었 MPI,도를 구현하는 메시지를 전달하는 모델이다.그러나 HPC 세계,이 메시지를 전달하는 모델은 일반적으로 매우 어려운 프로그램에서,그리고 사람들이 변론하는 메모리를 공유 모델과 같은 OpenMP 또는 UPC 쉽게 프로그램이다.

누군가는 이유를 알고 이러한 차이의 인식에 메시지 전달에 대공유 메모리에서 그것 HPC 세계?그것은으로 인해 몇 가지 기본적인 차이는 방법에 얼랑 및 MPI 구현하는 메시지를 전달하게 만드는 얼랑 스타일의 메시지를 전달하는 것보다 훨씬 쉽게 MPI?또 다른 이유?

도움이 되었습니까?

해결책

나는 이전의 모든 답변에 동의하지만, 완전히 명확하지 않은 핵심 요점은 MPI가 어려워지고 Erlang Easy가 도메인과의 모델의 일치라는 이유가 분명하다고 생각합니다.

Erlang은 로컬 메모리 개념, 비동기 메시지 통과 및 모든 스레드가 얻을 수있는 일부 형태의 글로벌 데이터베이스를 사용하여 해결 된 상태를 기반으로합니다. 많은 데이터를 이동하지 않는 응용 프로그램을 위해 설계되었으며 조정이 필요한 100k 별도의 노드로 폭발하지 않아야합니다.

MPI는 로컬 메모리 및 메시지 전달을 기반으로하며, 주변 이동이 도메인의 핵심 부분 인 문제를위한 것입니다. 고성능 컴퓨팅은 문제를 위해 데이터 세트를 가져 와서 다양한 컴퓨팅 리소스로 나누는 것입니다. 그리고 데이터가 밸런싱을 염두에두고 명시 적으로 배포되어야하므로 메시지 통과 시스템에서는 매우 어려운 일입니다. 본질적으로 MPI는 공유 메모리가 확장되지 않는 욕구 입력으로 볼 수 있습니다. 또한 100K 프로세서 이상에 걸쳐 고성능 계산을 목표로 삼고 있습니다.

Erlang은 가능한 최고 성능을 달성하려고하지 않고 자연적으로 평행 한 문제를 자연 스레드로 분해하려고합니다. MPI에 비해 완전히 다른 유형의 프로그래밍 작업을 염두에두고 설계되었습니다.

따라서 Erlang은 PTHREADS 및 기타 국소 이기종 스레드 솔루션에 비해 가장 좋습니다. MPI가 아닌 매우 다른 (그리고 어느 정도는 본질적으로 더 어려운) 문제 세트를 목표로합니다.

다른 팁

병렬에서 얼랑 아직도 예쁜 하드를 구현할 수 있습니다.에 당신은 여전히 그 밖으로 분리하는 방법 당신의 문제이지만,몇 가지 작은 것들을 쉽게 이 때 어려움에 비해 몇 가지 MPI 라이브러리에서는 C 또는 C++.

첫째,이후 얼랑의 메시지 전달 등이어 기능,문법 설 느끼게 쉽습니다.

또한,얼랑 라이브러리를영장,어린이 수영장 등이 마련되어 주위에 얼랑의 메시지를 전달합니다.이 지지 구조물을 제공하는 데 도움이 되 향상으로 병렬 processling 땅입니다.살펴보 구성 요소의 OTP 다음과 같 gen_server,gen_fsm,gen_event.이들은 매우 사용하기 쉬운 구조를 도울 수 있는 프로그램이가 병행합니다.

나는 그것이상의 견고성을 사용할 수 있는 표준 라이브러리는 차별화 얼랑의 메시지 전달에서 다른 MPI 구현하지 않는 정말 어떤 특정 기능의 언어 자체.

일반적으로 HPC의 동시성은 다량의 데이터에서 작업하는 것을 의미합니다. 이런 종류의 병렬성을 불립니다 데이터 병렬 처리 운영 체제는 패러다임을 전달하는 메시지를 사용하는 경우 스스로를 구현해야 할 작업 예약 및 배치와 같은 것들을 처리하기 때문에 OpenMP와 같은 공유 메모리 접근법을 사용하여 구현하기가 더 쉽습니다.

대조적으로, Erlang은 대처하도록 설계되었습니다 작업 병렬 처리 제한된 양의 통신과 결함 공차 및 복구에 대한 강력한 요구 사항만으로 다양한 코드를 동시에 실행 해야하는 전화 시스템에서 발생합니다.

이 모델은 대부분의 사람들이 pthreads를 사용하는 것과 유사합니다. 각 요청은 다른 스레드로 처리 할 수있는 웹 서버와 같은 응용 프로그램에 적합하며 HPC 응용 프로그램은 작업자간에 교환 해야하는 막대한 양의 데이터에서 거의 동일한 작업을 수행합니다.

MPI로 프로그래밍 할 때와 Erlang으로 프로그래밍 할 때 마인드 세트와 관련이 있다고 생각합니다. 예를 들어, MPI는 언어가 내장되지 않은 반면 Erlang은 메시지 전달에 대한 내장 지원을 제공합니다. 또 다른 가능한 이유는 단순히 메시지를 보내거나 수신하는 것과 분할 솔루션을 동시 실행 단위로 분리하기 때문입니다.

Erlang을 사용하면 기능이 기능 호출에서 기능 호출에서 실제로 ZIP를 제공하는 기능 프로그래밍 프레임에서 생각해야하며, 수신은 언어의 일반적인 구성처럼 보이는 활성 행위입니다. 이를 통해 실제로 수행하는 계산과 메시지 보내기/수신 행위 사이에 더 밀접한 관련이 있습니다.

반면에 MPI를 사용하면 실제 메시지 전달에 대해서만 생각해야하지만 실제로 작업의 분해는 아닙니다. 이 사고 프레임에는 솔루션 작성과 코드의 메시징 인프라간에 약간의 컨텍스트 전환이 필요합니다.

토론은 계속 될 수 있지만 일반적인 견해는 메시지 전달 구성이 실제로 사용하는 프로그래밍 언어와 패러다임에 내장 된 경우 일반적으로 "해결 된 다른 것과 비교하여 솔루션을 표현하는 더 나은 수단입니다. "또는 언어에 대한 애드온 (라이브러리 또는 확장 형태)으로 존재합니다.

IT 및 HPC 세계에서 메시지 통과와 공유 메모리의 인식에 왜 그런 차이가 있는지 아는 사람이 있습니까? Erlang과 MPI가 MPI보다 훨씬 쉽게 Erlang 스타일의 메시지 통과를하는 메시지 전달을 구현하는 방법의 근본적인 차이로 인해 발생합니까? 아니면 다른 이유가 있습니까?

그 이유는 단순히 병렬성 대 동시성입니다. Erlang은 동시 프로그래밍을 위해 자란다. HPC는 병렬 프로그래밍에 관한 것입니다. 이것들은 관련이 있지만 다른 목표입니다.

동시 프로그래밍은 비 결정적 제어 흐름에 의해 크게 복잡하며 대기 시간은 종종 중요한 목표입니다. Erlang의 불변 데이터 구조 사용은 동시 프로그래밍을 크게 단순화합니다.

병렬 프로그래밍은 훨씬 간단한 제어 흐름을 가지고 있으며 목표는 대기 시간이 아닌 최대 총 처리량에 관한 것입니다. 효율적인 캐시 사용이 여기에서 훨씬 중요하므로 Erlang과 불변 데이터 구조를 모두 부적합하게 만듭니다. 돌연변이 공유 메모리는 이러한 맥락에서 다루기 쉬우 며 실질적으로 더 좋습니다. 사실상 캐시 일관성은 하드웨어로 전달되는 메시지를 전달하고 있습니다.

마지막으로, 이러한 기술적 차이 외에도 정치적 문제도 있습니다. Erlang 사람들은 Erlang이 그렇지 않은 경우 멀티 코어와 관련이 있다고 척하여 멀티 코어 과대 광고를 타려고합니다. 특히, 그들은 큰 확장 성을 선전하고 있으므로 절대 성능도 고려해야합니다. Erlang은 한 핵심의 절대 성능 저하에서 어느 수의 코어에서도 절대 성능이 좋지 않은 것에 이르기까지 쉽게 비늘입니다. 당신이 상상할 수 있듯이, 그것은 HPC 커뮤니티에 깊은 인상을주지 않습니다 (그러나 많은 동시 코드에는 적합합니다).

MPI 대 OpenMP/UPC와 관련하여 MPI는 문제를 작은 조각으로 자르고 데이터를 이동하는 데 책임을집니다. OpenMP/UPC를 사용하면 "모든 데이터가 있습니다"를 사용하면 포인터를 피해야합니다. MPI 장점은 32-512 CPU 클러스터가 32-512 CPU 단일 시스템보다 훨씬 저렴하다는 것입니다. 또한 MPI를 사용하면 알고리즘을 설계 할 때 비용이 선불됩니다. OpenMP/UPC는 시스템에서 NUMA를 사용하는 경우 (및 모든 대형 시스템) 프로그램이 확장되지 않으며 이유를 파악하는 데 시간이 걸릴 것입니다.

이 기사는 실제로 그것을 잘 설명합니다. Erlang은 우리가 작은 데이터를 보낼 때 가장 좋습니다. MPI는 더 복잡한 것들에서 훨씬 더 잘합니다. 또한 Erlang 모델은 이해하기 쉽습니다 :-)

Erlang 대 MPI- 최종 결과 및 소스 코드

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top