2011-09-30 2 views
5

배포 계층을 작성하는 데 MPI를 사용했습니다. 데이터 소스의 n 개와 데이터 소비자의 k 개가 있다고 가정 해 보겠습니다. 나의 접근 방식에서는 각각의 MPI 프로세스가 데이터를 읽은 다음이를 주어진 방식 (논리)으로 하나 또는 여러 개의 k 데이터 소비자 (다른 MPI 프로세스)에 배포합니다.MPI 배포 계층

매우 일반적인 것 같아요. 제 질문은 이미 완료된 것 같은가요?

간단하지만 매우 복잡 할 수 있습니다. 배포에서는 데이터 소비자 중 어떤 사용자가 작업 준비가되었는지 확인합니다 (동적 작업 배포). 데이터를 기반으로 주어진 알고리즘에 따라 데이터를 배포 할 수 있습니다. 많은 가능성이 있으며, 우리 모두가 바퀴를 재발 명하고 싶지 않습니다.

답변

1

내가 아는 바로는 MPI API 자체 이외에 일반적인 구현이 없습니다. 문제의 제약 조건에 따라 올바른 기능을 사용해야합니다.

단순한 n-producer-and-k-consumers 동기화 작업/데이터 대기열을 만들려고한다면 물론 이미 많은 구현이 있습니다 (단지 Google 만 있으면 몇 가지를 얻을 수 있습니다) .

그러나 제시하는 방식은 매우 보편적 인 것처럼 보입니다. 때로는 데이터가 한 소비자에게, 때로는 모든 사람에게 보내지기를 원할 때가 있습니다. 그 경우에는, 당신이 원하는 것을 언제 생각해야하는지, 따라서 점 대 점 (point-to-point) 통신 기능 또는 집단 통신 기능을 사용할 수 있습니다 (물론 모든 사람은 무엇을 기대해야하는지 알고 있어야합니다. 제작자가 방송을 원할 때 소비자가 단일 소스의 데이터를 기다릴 수 없습니다). 자료...).

모든 것을 제쳐 놓고, 여기에 귀하의 모든 요구에 응답 할 것 같다 마음에 오는 하나의 구현 :
이 동기화 된 큐를 확인, 모든 종류의 결정 (다른에서 복용 한 쪽 끝에서 데이터를 밀어 생산자, 소비자 대기열 크기 제한, 전체 대기열 블록에 요소 추가 또는 실패, 빈 대기열 블록에서 요소 제거 또는 실패 등).
데이터가 모든 사용자를위한 것인지 또는 그 중 하나만을위한 소비자인지를 나타내는 일부 플래그가 데이터에 포함되어 있다고 가정하면 소비자는 해당 요소를 살짝 들여다 보거나 요소를 제거하거나 그대로두면 이미 보유하고 있음을 알 수 있습니다 해당 ID를 로컬로 또는 데이터 자체의 플래그를 변경하여).
데이터를 처리 할 때까지 하나의 집단 데이터를 차단하지 않으려면 각 데이터 유형마다 하나씩 2 개의 대기열을 사용할 수 있으며 소비자는 한 번에 하나의 대기열에서 데이터를 가져옵니다 (매 큐마다 다른 큐를 선택하거나 큐를 무작위로 선택하거나 큐 중 하나에 우선 순위를 지정하거나 데이터에서 공제 할 수있는 허용 된 순서대로 (예 : 가장 낮은 ID 우선).

긴 답변 죄송합니다

, 나는이 도움이 : 내가 나 자신에 의해 그것을 필요한 것으로 보인다

+0

바랍니다. 성능 및 기능과 관련하여 많은 문제가 있습니다. 쉬운 일이 아니지만 도전적 일 것입니다.) – kokosing