나는 약간 연구와 관련있는 질문이있다. 공유 메모리를위한 MPI 설정이란 무엇을 의미합니까?
현재 I는 (특히 openmpi 6.3 사용)에 기초하여 구조 MPI 골격 프레임 워크의 구현을 완료했다. 프레임 워크는 단일 기계에서 사용되어야합니다. 지금, 나는 다른 이전의 골격 구현과 비교하고 (예 : scandium, fast-flow ..) 제가 발견했습니다것은 내 구현의 성능은 다른 구현만큼 좋은되지 않는 것입니다. 내 구현은 MPI (따라서 보내기 및 수신 작업의 일치가 필요한 양면 통신)를 기반으로하기 때문에다른 구현은 공유 메모리를 기반으로합니다. (...하지만 여전히 나는 것을 추론 할 좋은 설명이 없다, 그것은 내 질문의 일부입니다) 두 종류의 완료 시간에 대한 몇 가지 큰 차이가 있습니다
.
오늘은 여기 공유 메모리 =>openmpi-sm
오픈-MPI의 구성을 소개하고 내 질문에 오는이 올하고있다.
가 공유 메모리에 대한 MPI를 구성하는 것을 의미한다 무엇1? MPI 프로세스가 자체 가상 메모리에있는 동안 말입니다. 다음 명령에서와 같은 플래그는 실제로 무엇입니까? (나는 모든 통신이 명시 적으로 메시지를 전달함으로써 MPI에서 프로세스간에 메모리가 공유되지 않는다고 생각했다.)
shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out
2 왜 MPI의 성능이 훨씬 더 공유 메모리 용으로 개발 된 다른 골격 구현 비교와이다? 적어도 하나의 단일 멀티 코어 컴퓨터에서도 실행하고 있습니다. (다른 구현에서는 스레드 병렬 프로그래밍을 사용했기 때문에 그렇다고 생각합니다.하지만 그에 대한 설득력있는 설명이 없습니다.)
어떤 제안이나 향후 토론을 환영합니다.
제 질문을 명확히해야하는지 알려주세요.
감사합니다!
FWIW, 리눅스 3.2에서, process_vm_readv/writev syscalls이 있으며, KNEM과 거의 같습니다. 예 : http://man7.org/linux/man-pages/man2/process_vm_readv.2.html – janneb
@janneb, 지적 해 주셔서 고맙습니다. 3.x 커널은 이제 대부분의 HPC 시스템에서 인기가 없습니다. 그러나 KNEM은 단순한 데이터 전송 이상의 기능을 제공합니다. 비동기 작업, 완료 알림 등. –
사실이긴하지만 다시 KNEM 패치가있는 커널도 아닙니다. – janneb