2009-12-09 2 views
0

하나의 서버가 있고 두 개의 프로세스 유형 A (많은 프로세스가 많은 스레드)와 B (프로세스 n 스레드가 n-CPU의 프로세스)를 가지고 있고 A에서 많은 단방향 메시지를 보내고 싶었습니다 MPI는 대량의 소프트 실시간 IPC에 적합합니까?

  • 공유 메모리
  • 난 내 자신의 라이브러리를 작성하는 생각

    1. 유닉스 도메인 소켓
    2. 윈도우 명명 된 파이프 : B.는 MPI에게 사용하여 사용자 정의 구현보다는이 더 나은 구현을인가에 1과 2에 기초하여, 그리고 또한 3이 b인지 궁금합니다. 공유 메모리가 잠금을 필요로하기 때문에 에터.

      프로세스 A는 외부 서비스를 제공하므로 B의 자원 사용 및 일반적으로 전달되는 메시지는 가능한 한 적은 리소스를 소비해야하며 A는 메시지를 보낼 때 차단 또는 비 차단 모두로 구현 될 수 있습니다. B의 리소스 사용과 메시지 전달은 A의 사용법에 따라 선형 적으로 확장되어야합니다.

      결국 컴퓨터간에 브로드 캐스팅 기능이 필요합니다. 아마도 프로세스 B에 대한 것입니다.

      저는 MPI (특히 openMPI)가이를위한 훌륭한 라이브러리이며 다양한 운영 체제에서 가장 최적의 커널 프리미티브를 사용하고 있습니다.

    답변

    2

    MPI가 메시지 전달 인프라에 맞게 아키텍처를 재 작업하려는 경우 MPI가 가장 잘 작동합니다.

    이론적으로 단일 서버에서 호스팅 될 때 MPI 메시지 구조로의 전환을 수행 할 필요가 없기 때문에 이론적으로 단일 서버에서 호스팅 될 때 자신이 만든 라이브러리를 랩핑하면 더 빨리 처리 할 수 ​​있습니다. 즉, MPI는 매우 효율적이며 (특히 MPI-2, Open MPI을 지원함) 매우 강력합니다. 자신의 라이브러리에서 동일한 유연성, 구성 가능성 및 견고성을 얻으려면 어려움을 겪을 것입니다.

    여러 대의 컴퓨터간에 브로드 캐스팅 할 경우 MPI는 자신의 방식을 시도하는 것보다 나은 방법 일 수 있습니다.

    또한 MPI는 많은 통신 모드를 지원합니다. 매우 빠른 단일 기계 통신을위한 shared memory과 기계 간 통신을위한 TCP (더 많은 상용, 더 빠른 옵션)를 지원합니다.

    +0

    공유 메모리가 여전히 "x-sender - one receiver"시나리오에서 더 나을 수 있습니다. 하나의 이름이 지정된 프로세스 간 잠금 (IP-Lock)으로 가정하면 경쟁이 문제가됩니다. 이것이 코스에 대한 나의 순진한 견해입니다. 내가 묻는 것은 openMPI 나 MPICH가 IP-Locking의 비용을 분산시키기 위해 영리한 데이터 구조를 가지고있어 명명 된 파이프와 유닉스 - 돔 소켓보다 잘 확장된다는 것입니다. –

    +1

    공유 메모리가이 상황에서 더 나을 수 있습니다. 그러나 이와 같은 일을 할 때 프로파일 링을 대체 할 수는 없습니다. 안타깝게도 이와 같이 확장 성이 높고 parallized 된 응용 프로그램은 특정 하드웨어를 기반으로 대답이 크게 달라질 수 있으므로 종종 실제 하드웨어에서 프로파일 링을 요구하는 경향이 있습니다. –

    1

    MPI는 고성능 응용 프로그램 용으로 제작되었습니다.
    동일한 mboard에있는 CPU 간의 통신에도 매우 유용합니다.

    브로드 캐스트에 대해 잘 모르겠습니다. 몇 년 전에 사용했던 시스템이 아니었지만 그것이 상호 연결 또는 MPICH의 제한 사항인지 기억할 수 없습니다.

    ps. 당시에는 Windows에서 가장 잘 작동했기 때문에 유연성이 필요했기 때문에 MPICH2 또는 OpenMPI를 사용하지 않았기 때문에 MPICH를 사용했습니다.

    +0

    MPICH - 좋은 팁, 많은 기본 문서가있는 것처럼 보입니다. 즉, mpi-forum 사양 설명서를 읽을 필요가 없습니다. –

    +2

    MPICH를 사용하려면 MPICH2를 살펴 보는 것이 좋습니다. http://www.mcs.anl.gov/research/projects/mpi/mpich2/ 원래 MPICH는 현재 상당히 오래된 버전입니다. OpenMPI는 내 경험에 비추어 볼 때 MPICH보다 성능이 좋고 성능이 뛰어납니다.하지만 단일 시스템에서 공유 메모리 통신 채널을 사용하는 경우에는 더욱 그렇습니다. –

    관련 문제