2009-10-09 6 views
0

프로그램을 병렬 처리하고 싶습니다. 스레드가 공유 메모리의 하나의 큰 데이터 구조에서 작업하는 것은 그렇게 어렵지 않습니다. 하지만 클러스터를 통해 배포 할 수 있기를 원하며이를 수행 할 기술을 선택해야합니다. MPI는 하나의 아이디어입니다.공유 메모리 설정에서의 MPI 오버 헤드

공유 메모리 용 특수 버전의 구현을 건너 뛰고 MPI가 모든 사례를 처리하게한다면 오버 헤드에 MPI (또는 다른 기술)가있을 것입니까?

업데이트 :

나는 많은 컴퓨터에 동시에 큰 데이터 구조 (게임 트리) 성장하고자합니다. 대부분의 부분은 하나의 클러스터 노드에만 있지만 일부 (불규칙한 트리 상단)가 공유되고 때때로 동기화됩니다.

공유 메모리 컴퓨터에서 공유 메모리를 통해 공유하고 싶습니다. 이 작업을 일반적으로 수행 할 수 있습니까?

+0

the-locster는 병렬 처리하려는 알고리즘에 대해 자세히 설명합니다. – Alexandru

답변

0

알고리즘에 따라 다릅니다. Clealy의 클러스터 간 통신은 프로세스 간 통신 또는 프로세스 내의 다중 스레드로서 공유 메모리보다 훨씬 느립니다. 따라서 클러스터 간 트래픽을 최소화해야합니다 (예 : 가능하면 가능한 한 데이터를 복제하거나 노드 간 통신을 최소화하는 방식으로 문제를 해결하십시오.

노드 간 통신이 거의없는 'embarrisngly'병렬 알고리즘의 경우 쉬운 선택입니다. 이는 각 노드가 긴 기간 동안 숫자를 처리하고 주기적으로 중앙 노드에보고 할 수있는 암호화 키 검색과 같은 문제입니다. 키를 테스트하려면 통신이 필요합니다.

1

널리 사용되는 모든 MPI 구현은 공유 메모리를 통해 로컬로 통신합니다. 버퍼를 포장하고 포장을 풀 때 (즉, 합리적인 설계) 시간을 소비하지 않는 한 성능은 매우 좋습니다. 실제로, MPI에 의해 부과 된 디자인은 별도의 주소 공간이 캐시 일관성을 향상시키기 때문에 대부분의 스레드 구현보다 더 잘 수행 할 수 있습니다. MPI를 지속적으로 이기기 위해 스레드 구현은 캐시 계층과 다른 코어가 수행중인 작업을 인식하고 있어야합니다.

좋은 네트워크 하드웨어 (예 : InfiniBand)를 사용하면 HCA가 버퍼를 네트워크에 연결하거나 해제하여 CPU가 다른 작업을 수행 할 수 있습니다. 또한, 많은 작업들이 메모리 대역폭이 제한되어 있기 때문에, 예를 들어, 1 코어를 여러 노드에 걸쳐 소켓 당 여러 개의 코어를 사용하는 경우보다.