-다음 링크를 참조해 환경변수를 설정한다.

https://blogs.technet.microsoft.com/windowshpc/2015/02/02/how-to-compile-and-run-a-simple-ms-mpi-program/


-텍스트 파일에 다음과 같이 복붙하고 확장자는 c로 만든다.

#include 
#include 
#include 
#include 
SEXP hello(void);
SEXP hello(void)
{
int rank, size;
MPI_Init(NULL, NULL);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
Rprintf("Hello from rank %d out of %d\n", rank, size);
MPI_Finalize();
// Create an R integer data type with value zero
SEXP result = PROTECT(result = NEW_INTEGER(1));
INTEGER(result)[0] = 0;
UNPROTECT(1);
return result;
}


-해당 파일이 있는 폴더에 아래와 같은 내용으로 Makevars.win이란 파일을 만든다. 만들 때 따옴표에 주의한다.

PKG_LIBS=-L'$(MSMPI_LIB64)' -lmsmpi

PKG_CPPFLAGS=-I'$(MSMPI_INC)'


-c 파일이 있는 폴더에서 아래 명령으로 파일을 빌드한다. 만들어질 파일 이름의 확장자가 dll임을 확인하라.

R CMD SHLIB -o mpihello_fromR.dll 파일이름.c --preclean


-빌드 중에 __int64를 알수 없다는 에러 메시지가 뜨면 아래 링크와 같이 mpi.h 파일을 열어 수정한다.

http://stackoverflow.com/questions/27891478/error-when-compiling-in-cygwin


-빌드가 끝났으면 아래 내용으로 mpihello.R 이란 파일을 하나 만들자.

dyn.load("mpihello_fromR.dll").Call("hello")


-c 파일이 있는 폴더에서 명령창으로 다음을 실행한다.

mpiexec -n 4 R -f mpihello.R

Posted by 타다키치
,