나는 gcc
과 OpenMPI을 사용하고 있습니다. 보통 나는 mpirun
래퍼를 사용하여 MPI 프로그램을 실행 - 예를 들어,mpirun없이 OpenMPI 프로그램 실행
mpirun -np 4 myprogram
4 개 프로세스를 시작합니다.
그러나 자동으로 (아마도 위의 -np 4
과 같은 하드 코딩 된 옵션을 사용하여) 바이너리를 쉽게 생성 할 수 있는지 궁금합니다.
는 나는 다음과 같은, 내 프로그램을 호출하는 C 래퍼 쓸 수 있습니다 알고
#include <stdlib.h>
#include <unistd.h>
int main() {
char *options[] = { "mpirun", "-np", "4", "myprogram" };
execvp("mpirun", options);
/* Ignoring return value to keep example simple */
return EXIT_SUCCESS;
}
을하지만이 조금 서투른 것 같다 나는 두 개의 실행 파일 대신 하나와 끝까지.
는 I 명시 적으로
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
하지만 실행 결과 실행할 때 (내가 인수로 -np 0
을 부여했을 경우와 같이)가, MPI_Comm_size
세트는 그룹 크기가 제로처럼 MPI 라이브러리를 연결하기 위해 노력했다. 그룹 크기를 전달하기 위해 환경 변수 또는 다른 것을 사용할 수 있습니까? 또는 단일 실행 가능 MPI 프로그램 (Linux 및 gcc
사용)을 빌드하는 또 다른 방법이 있습니까?
나는 어떻게 할 수 있을지 모르지만, 내 머리 꼭대기에서. 나는이 작업을 수행 한 몇 가지 프로그램을 알고 있습니다. 거기에는 진정한 마술이 없습니다. 당신이 할 수있는 장면들 뒤에는 많은 것들이 있습니다. –
정확하게 이해합니까?'mpirun'을 건너 뛰고 싶거나 어떻게 자동으로'mpirun'을 호출하고 싶습니까? –
@Hristo Iliev : 하나의 정적 바이너리가 있다면 좋을 것입니다. – Jay