heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その5: CUDA+OpenMPI 実行 )

Open_MPI_logo.png
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" のプログラムに作り替えていきます。

  1. "OpenMPI" プログラム
  2. "CUDA" プログラム
  3. "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" プログラムを実行できる環境が整いました。

以上。