2012-04-09 4 views
0

는 기본적으로 나는 이런 식으로 뭔가를 달성하고자 : MPI의
두 개의 스레드로 두 개의 프로세스를 만드는 방법, MPI로 서로 보내고 싶습니까?

Process 1 
    Thread 1 
    Receive X from process 2 
    Thread 2 
    Receive Y from process 2 
Process 2 
    Thread 1 
    Send X to process 1 
    Thread 2 
    Send Y to process 1 

의 pthreads 라이브러리와 C 언어에 대한.
PVM에서 이미했는데, 소스 코드는
master.c : http://pastebin.com/wwEie7gn,
slave.c : http://pastebin.com/gfeCkcss입니다.
무엇을하려고 했는가 :
prog.c : http://pastebin.com/tCVKN3fe
어떻게 든 수신자 스레드는 아무 것도받지 못합니다. 나는 그 문제가 뭔지 모른다. 누군가가 나에게 적절한 방법을 보여줄 수 있기를 바랍니다.
스레드 지원없이 컴파일 된 MPI를 실행하고 있습니다.

+0

4 개의 프로세스를 생성하지 않는 이유는 무엇입니까? – suszterpatt

+0

당신은 다음을 읽어야합니다. http://www.mpi-forum.org/docs/mpi-20-html/node162.htm#Node162 – Anycorn

+0

@suszterpatt 나중에 이들 스레드가 pthreads를 사용하여 메모리 공간을 공유하기를 원합니다. – wieczorek1990

답변

0

두 메시지 모두에 다른 태그를 사용하고 싶습니다. 수신자 스레드의 알려진 ID로 메시지에 태그를 지정할 수 있습니다. 그런 다음 프로세스 1의 각 스레드는 ID가 태그 인 수신을 게시하고 수신은 특정 스레드로 향하는 메시지와 만 일치합니다.

MPI 2.2는 스레딩과의 상호 운용성이 제한적입니다. 기본적으로 대부분의 MPI 구현은 스레드로부터 안전하지 않습니다. 예를 들어 Open MPI는 구성 시간 동안 풀 스레딩 지원을 명시 적으로 활성화해야합니다 (기본적으로 비활성화 됨). provided 인수가 MPI_Thread_init (또는 MPI_Query_thread) 인 리턴 된 MPI_THREAD_SERIALIZED 스레딩 레벨이 있어야 다른 스레드에서 MPI 호출을 수행 할 수 있습니다. MPI 라이브러리가 MPI_THREAD_SINGLE 또는 MPI_THREAD_FUNNELED 레벨을 제공하는 경우 운이 없으며 기본 스레드 이외의 MPI 호출을 할 수 없습니다. 제공된 레벨이 MPI_THREAD_SERIALIZED이면 모든 스레드에서 MPI 호출을 만들 수 있지만 호출을 명시 적으로 직렬화해야합니다. 즉, 두 개 이상의 호출이 동시에 (예 : 비평 섹션 또는 뮤텍스와 함께) 이루어지지 않아야합니다. 제공된 레벨이 MPI_THREAD_MULTIPLE이면 완전한 다중 스레드 지원을 가지며 어떤 스레드에서든 어떤 시점에서든지 MPI 호출을 할 수 있습니다.