본문 바로가기
Programming/Tips(C++,C#)

Visual Studio에서 MPICH설정하기

by 곰네Zip 2008. 6. 12.

출처 블로그 > 자운님의 블로그
원본 http://blog.naver.com/baida21/50015052635

병렬분산처리를 Visual Studio에서 하려고 mpich를 사용한다.


1. 인스톨

http://www-unix.mcs.anl.gov/mpi/mpich2/

여기서 윈도우용을 다운받는다.


mpich2-1.0.5p2-win32-ia32.msi 를 실행한다.

닷넷 1.1을 설치하라는 지시가 나오면 설치한다.

환경변수 path에 C:\MPICH2\bin 을 추가한다.

mpiexec -n 1 cpi.exe 를 실행해서 예제를 돌려본다.


처음 실행시에는 username과 password를 물어볼수 있다. 향후 묻지 않게 하려면

mpiexec -register 를 실행해서 레지스트리에 등록하면 된다.


2. Visual Studio 에서 실행


examples/cpi.exe를 Visual studio에서 컴파일 해보자


먼저 적당한 이름의 프로젝트를 생성한다. 그리고 그 프로젝트는 콘솔타입에 "빈프로젝트"로 생성한다.




사용자 삽입 이미지
 
 
 



프로젝트 속성에서 "추가 포함 디렉터리"에 MPICH의 include 디렉토리를 지정한다.


사용자 삽입 이미지




추가 라이브러리 디렉터리에 MPICH의 lib 디렉터리를 지정한다.

사용자 삽입 이미지
 
 
 
 
추가 종속성에서 mpi.lib 라이브러리를 포함한다.


 

사용자 삽입 이미지
 
위와 같이 설정하고 , 이제 컴파일을 해보자 그러면 Debug 디렉토리에 cpi.exe가 생성되었음을 볼 수 있다.
 
 
2. sundials compile in VC++
 
DAE solver는 위의 sundials를 사용하려고 한다.
왜냐면, 위 라이브러리가 mpich등 병렬분산처리를 지원하는 ODE 라이브러리이기때문입니다.
 
압축을 풀면 INTSTALL 관련 정보를 볼 수 있다.
기본 인스톨은
./configure
make
make install
이다.
단, 예제를 돌려보려면 configuration에서 추가적인 옵션을 설정해 주어야 하는데, 이것은
 
 
To follow up on comments on the sundials cvodes email list, here is how I compiled a freshly downloaded CVODES using VC++ from the command line

1. Create sundials\shared\include\sundials_config.h with these two lines #define SUNDIALS_DOUBLE_PRECISION #define SUNDIALS_USE_GENERIC_MATH

2. IN CVODES SOURCE FOLDER cl /c /I..\include /I..\..\shared\include *.c lib /out:cvodes.lib *.obj

3. IN SUNDIALS SHARED SOURCE cl /c /I..\include *.c lib /out:sundials.lib *.obj

4. IN SUNDIALS nvec_ser cl /c /I..\shared\include *.c lib /out:nvec_ser.lib *.obj

5. Build application by compiling it and linking to cvodes.lib sundials.lib nvec_ser.lib
 

이 내용은 일종의 예시일 뿐이다. 구체적으로 VC++안에서 프로젝트를 구성해서 컴파일을 해보자.
 
3. VC++ sundials 컴파일
 
일단 sundials의 소스를 cygwin에서 푼 다음, 여기서 ./configure를 실행한다.
이렇게 되면, 몇몇 *.h 파일들이 생성된다. 특히 sundials_config.h 가 만들어지는데, 이것은 컴파일 할때 빼 놓아서는 안된다.
 
프로젝트 디렉토리를 구성한다. 각 라이브러당 하나씩 추가한다.
 
 
사용자 삽입 이미지
 
정적라이브러리 프로젝트로 구성한다.
 
 
 
또한, sudials의 include를 복사한다.
그리고 src/cvode/* 와 src/sundials/* 를 모두 복사한다.
 
사용자 삽입 이미지


 

사용자 삽입 이미지
 
이렇게 옮기면 디렉토리의 구조는 원래와 조금 다르지만, 컴파일 하기에는 무리는 없다.
 
여기에서 헤더파일들의 정보를 포함해 주면된다.

사용자 삽입 이미지


 

이렇게 하면 컴파일은 무난하게 이루어진다.
 
각각의 라이브러리에 대해 동일하게 만들어준다.
 
위와 같이 모두 하고나서 마지막으로 sundials.lib를 만들면서 다른 라이브러리를 모두 하나로 합해서 사용했다.
 
 
사용자 삽입 이미지
 
 
이제 sundials\sundials_config.h 만 include 디렉토리로 옮기면 하나의 라이브러리와 include를 이용해서 예제에 대한 컴파일이 가능하다.
 
 
사용자 삽입 이미지
 
 
 
 
리눅스용으로 나온 것이지만, 기본적으로 VC++에서도 크게 컴파일하는데 어렵지 않다. 헤더와 라이브러리만 잘 포함시키면 문제없이 컴파일이 된다.
다만 비주얼 툴이라 개별 라이브러리로 만들때 일일히 프로젝트를 생성해야 한다는 것이 귀찮기는 하다.
 
VS2005에서 컴파일시 주의점
 
컴파일시 다음 사항을 주의해야 한다.
vs2005부터는 C runtime의 단일 쓰레드 디버그를 위한 LIBCD.lib를 지원하지 않는다.
해결책은 링커에서 포함하지 않을 라이브러리로 지정하는 방법이 가장 간단하다.

사용자 삽입 이미지

2. mpich 사용법
 
간단하게 사용하는 방법을 보면 다음과 같다.
 
Unix계열은
 
mpd &
cd /home/you/mpich2-installed/examples
mpiexec -n 3 cpi
mpdallexit
 
이렇게 해주면 된다.
windows계열은 smpd.exe를 사용하는데, smpd는 윈도우, 유닉스에서 mpd대신 모두 사용할 수 있는 데몬이다.
반응형

댓글