コマンドラインでCUDAをいじっていると、nvccのオプションを忘れてしまいがちです.忘備録として以下にまとめます.
オプションの詳細はNVCC Command Optionsを参考にして下さい.
使用 Version 10.0
2019.05.09
まずはコンパイラのバージョンを確認しましょう.
実行例
nvcc -V |
コードのあるディレクトリに移動してください.LinuxならGUIで移動して,右クリックで端末を選ぶと早いです.例として,sample.cuという名前のコードをコンパイルします. Linuxならa.outというファイルが生成され,Windowsならa.exeが生成されます.Windowsでは大量の警告が出るので、非表示にする方法は「Windowsでコンパイル時に出る大量の warning C4819 を消す」を参照してください.
コンパイル実行例
Linux nvcc sample.cu Windows nvcc sample.cu |
プログラムの実行は以下の通り入力してエンターキーを押します.
プログラム実行例
Linux ./a.out Windows a.exe |
生成されるa.outやa.exeでは,同一フォルダ内にある複数のプログラムをコンパイルすると上書きされてしまうので不便です. そこで,任意の名前の実行ファイルを作るには以下の方法です.今回は実行ファイル名をsampleとします.
コンパイル実行例
Linux nvcc sample.cu -o sample Windows nvcc sample.cu -o sample |
sampleという実行ファイルが生成されたことを確認して,プログラムの実行は以下の通り入力してエンターキーを押します.
プログラム実行例
Linux ./sample Windows sample.exe |
詳細はNVIDIAのNVCC Command Optionsで調べて下さい. O3のOはアルファベット大文字です.O1やO2も状況に応じて使ってみましょう.
最適化実施例
Linux nvcc -O3 sample.cu -o sample Windows nvcc -O3 sample.cu -o sample |
WindwosはVC++、Linuxではgccがデフォルト設定されます.もしIntel C++ Compiler(Intel C++ Compilerの使い方 )が入っていれば、下記のコマンドで設定可能です.WindowsはVC++で設定可能です.
Cコンパイラの選択
Linux nvcc -O3 sample.cu -o sample -ccbin icpc |
状況によりますが、O3を消してIntel選択だけのオプションが早いときもあります.いろいろ組み合わせを試してください.
cuFFTというFFTライブラリ(cuFFT)がNVIDIAから提供されています.自分で書くより餅は餅屋ですが,プログラムにcufft.hというヘッダーファイルだけでなく、コンパイル時にオプションでlcufftと入力しないと使えません.
FFTライブラリの利用
Linux nvcc -O3 sample.cu -o sample -ccbin icpc -lcufft Windows nvcc -O3 sample.cu -o sample -lcufft |
ハードを作っているところが提供するライブラリなので素直に使いましょう.
ハード指定で計算が早くなるかどうか良くわかりませんが、このオプションで実行できるグラフィックボードが指定できます.例えばGTX1050だと、Compute Capabilityを ここのサイト(CUDA GPUs)から読み取ると、6.1と記載があります.以下のように -arch=sm_61を追記することで指定が可能です.
グラフィックスボードの指定
Linux nvcc -O3 sample.cu -o sample -ccbin icpc -lcufft -arch=sm_61 Windows nvcc -O3 sample.cu -o sample -lcufft -arch=sm_61 |
nvprofという実行時間の解析(nvprof)がNVIDIAから提供されています.何もつけないと沢山の情報が表示されます. 当然オプション(nvprof)の付加が可能です. Visual Profiler(Visual Profiler)というGUIがありますが、コマンドラインで見たい場合に利用できます.
実行時間の解析
Linux nvprof ./sample Windows nvprof sample |
GUIが重いというか、NVIDIA NsightのようなIDEが苦手なのでコマンドラインで見たい方はおすすめです.
システムによってWindowsでコンパイルするとwarning C4819が200個ほど出て、非常にデバックがやりずらい場合があります.この警告を消すために、-Xcompiler "/wd 4819"を以下のように追記します.
実行時間の解析
Windows nvcc -O3 sample.cu -o sample -lcufft -arch=sm_61 -Xcompiler "/wd 4819" |
調べるとだいぶ前からのエラーのようで、ぼちぼち解消してほしいところです.