여러 스레드의 MPI_Isend 및 MPI_Irecv를 사용하여 InfiniBand RDMA를 통한 순위간에 초당 수백 개의 메시지를 교환하는 멀티 스레드 OpenMPI 응용 프로그램을 작성하고 있습니다.InfiniBand : 전송 속도는 MPI_Test * 주파수에 따라 다릅니다.
전송은 400-800KByte의 순서이며, 각 등급에 대해 약 9Gbps의 속도로 출입합니다. FDR 용량 이내입니다. 단순한 MPI 벤치 마크에서도 우수한 성능을 보여줍니다.
전용 스레드에서 MPI_Testsome을 사용하여 모든 활성 전송을 폴링하여 전송 완료를 확인합니다.
내가 달성 한 전송 속도는 메시지 속도에 따라 다르지만 더 중요한 것은 MPI_Testsome의 폴링 빈도에도 달려 있습니다. 즉, 내가 10ms마다 폴링하면 1ms마다 폴링하는 것보다 나중에 요청이 완료됩니다.
1ms가 아닌 10ms를 폴링하면 9ms가 지난 후에 대부분 요청을 받게 될 것입니다. MPI_Testsome에 대한 호출 횟수를 줄여서 전송 자체가 지연되어 전체 전송 속도가 느려지는 것을 기대하지 않습니다. 나는 MPI_Testsome이 완전히 수동적 일 것을 기대한다.
누구나 여기서이 문제가 발생할 수있는 원인을 알 수 있습니까?
감사합니다. 비동기 진행이 기본값이 아니라는 것을 알지 못했습니다. 나는 'btl_openib_async_event_thread'를 실행하고있다 (gdb에 따르면). 'btl_openib_use_async_event_thread'옵션도 설정됩니다. OpenMPI를 재구성하여 그면을보다 세밀하게 제어 할 수 있는지 알아 보겠습니다. –
'openib' 비동기 스레드는 제가 언급 한 비동기 진행 스레드가 아닙니다. InfiniBand 완료 대기열에서 알림 메시지를 읽어서 진행 대기열의 보류중인 이벤트 상태를 업데이트 할 수 있습니다. –