CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その5: CUDA+OpenMPI 実行 )
By Open MPI [BSD or Attribution], via Wikimedia Commons
目次
目的
以前、ubuntu(12.04) 4台で NFS にてファイル共有を行い、OpenMPI でホスト間通信させることで、Linuxクラスタ環境を構築しました。
そしてこのクラスタ環境の2ホスト上にCUDA対応ビデオカードを追加し、2ホスト間でGPGPUを行うことを目的として
CUDA対応ビデオカード配置と、前エントリでは対応するビデオカードドライバと CUDA Toolkit のインストールを行いました。
今回は表題の通り"CUDA+OpenMPI" のテストを行い、環境構築が正しく行えているか確認します。
方法
テストとして "n=1,2,…,512×2000 を足し上げるC言語のプログラム" を書きます。
(n+1)*(n/2)で答えが出ると言われれば実用性のないプログラムですが、作り易かったのでこれを選びました。
下記の段階をふみ、"CUDA+OpenMPI" のプログラムに作り替えていきます。
- "OpenMPI" プログラム
- "CUDA" プログラム
- "CUDA+OpenMPI" プログラム
"OpenMPI" プログラム
"OpenMPI" プログラムのコンパイルと実行結果
コンパイル・実行結果は下記です。(コンパイラは "icc" を使っているので、オプションはそれに最適化されています。)
$ mpicc mpi_reduce.c -o mpi_reduce -Wall -O3 -no-prec-div -xHost -parallel $ $ mpirun -n 4 -host calc0,calc1,calc2,calc3 ./mpi_reduce name=calc0, rank/size=0/4, my_sum=32768128000 name=calc1, rank/size=1/4, my_sum=98304128000 name=calc3, rank/size=3/4, my_sum=229376128000 name=calc2, rank/size=2/4, my_sum=163840128000 sum=524288512000 UINT64_MAX=18446744073709551615 $
"CUDA" プログラム
GPUで合算も実行させるべきとは思いますが、テストプログラムなのでご容赦ください。
"CUDA" プログラムのコンパイルと実行結果
"Tesla C1060" は "CUDA Capability 1.3" のため、下記のコンパイルオプションが必要です。
-arch="sm_13"
$ nvcc -ccbin=/opt/intel/bin/icc cuda.cu -o cuda --compiler-options="-Wall -xHOST -O3 -no-prec-div -parallel" -arch="sm_13" nvcc warning : The 'compute_11', 'compute_12', 'compute_13', 'sm_11', 'sm_12', and 'sm_13' architectures are deprecated, and may be removed in a future release. $ $ ./cuda sum = 524288512000 $
"CUDA+OpenMPI" プログラム
"CUDA+OpenMPI" プログラムのコンパイルと実行結果
$ nvcc -ccbin=/opt/intel/bin/icc mpi4cuda.cu -o mpi4cuda --compiler-options="-Wall -xHOST -O3 -no-prec-div -parallel" -arch="sm_13" -I /opt/openmpi/include -L /opt/openmpi/lib/ -lmpi nvcc warning : The 'compute_11', 'compute_12', 'compute_13', 'sm_11', 'sm_12', and 'sm_13' architectures are deprecated, and may be removed in a future release. $ $ mpirun -n 3 -host calc0,calc1,calc2 ./mpi4cuda name=calc0, rank/size=0/2, my_sum=131072256000 name=calc1, rank/size=1/2, my_sum=393216256000 sum = 524288512000 $
結論
"CUDA+OpenMPI" プログラムを実行できる環境が整いました。
以上。