2011-09-03 3 views
3

듀얼 소켓 8 코어 프로세서, 즉 각 프로세서에 4 코어가 있습니다. 나는 스펙을 완전히 보지 못했지만 ccNUMA 방식으로 각 프로세서에 별도의 메모리 뱅크가 연결되어있어 다른 프로세서의 메모리 뱅크에서 액세스하는 것이 상대적으로 느린 것으로 생각됩니다. 또한 그들은 내가 생각하는 다른 L3 캐시를 가지고 있습니다.다른 소켓에있는 프로세서간에 데이터를 가장 빨리 공유하는 방법

지금 내 질문은 두 프로세서간에 데이터를 공유하는 가장 빠른 방법입니다. 단순 공유 메모리는 ccNUMA 및 캐시 일관성으로 인해 문제가 발생합니다. 매우 빠른 방법이 있습니까?

+1

아니요, NUMA는 속도와 비용 간의 절충안입니다. 데이터를 각 CPU의 4 개 코어에 로컬로 유지하고 다른 CPU와 공유하지 않도록하십시오. ** ** 많은 하드웨어를 추가하여 문제를 해결할 수 있습니다 **. 슈퍼 컴퓨터는 그렇지만 가격표는 다릅니다. –

답변

2

구현하려는 성격에 따라 크게 달라질 수 있습니다. 필자가 보았던 것에서는 MPI를 사용하는 것보다 매우 엄격하게 관리되는 공유 메모리 접근법을 사용하면 더 나은 결과를 얻을 수 있습니다. (공유 메모리로 더 많은 일을 할 수 있기 때문에)

그러나 X가 잘 작동하는지에 대한 추측이 훨씬 적기 때문에 MPI를 완전히 잘못 이해하기가 더 어렵습니다. 여기

공유 메모리를 사용하는 몇 가지 일반적인 방법은 다음과 같습니다

읽기 전용 데이터 : 데이터가 충분히 작은 경우, 모든 노드에이를 복제하는 것이 가장 수 있습니다.

메모리 액세스가 "마이그레이션"되지 않는 매우 높은 공간 지역성을 갖고있는 경우, 공간 로캘 액세스의 각 "그룹"이 같은 노드에 있도록 데이터를 구성하십시오.

메모리 액세스 패턴이 높은 시간 지역성을 나타내지 만 캐시에 적합하도록 공간적 지역성이 충분하지 않은 경우 데이터를 로컬 버퍼로 복사하는 것이 좋습니다. 작업이 완료되면 다시 복사하십시오. 이를 통해 프로그램의 동일한 구조를 유지할 수 있습니다.

편집 : 질문에 "NUMA"태그를 추가하는 것이 좋습니다.

1

OpenMP와 OpenMPI 모두 여러 CPU에서 데이터를 공유 할 수 있습니다. 나는이 API 중 하나를 사용하는 것이 자신을 구현하려고 시도하는 것보다 더 빠를 것이라고 생각합니다. 어느 것을 사용하는 것은 당신이 구현하고자하는 것과 정확히 일치해야합니다.

관련 문제