nvccコマンドの最適化オプション(-O)ではデバイスコードは最適化されない???
CUDAでの最適化オプションについて理解できていなかったので、防備録としてまとめます。
nvccコマンドのオプションはNVIDIA社のサイトNVCC :: CUDA Toolkit Documentation
に記載されています。
これによると、nvccコマンドにもOオプションがありますね。
CやC++などをコンパイルするときはコンパイラに最適化してもらうためにOオプションでコンパイルすると全て良しなにしてくれることが多いです。
なのでCUDAでも何も考えずにOオプションを付ければ最適化はいい感じにしてくれそうな気が一見します。
ただ、ドキュメントを読んでみるとちょっと不穏な空気になります。なんと、Oオプションの説明には以下のように書かれているのです。
Specify optimization level for host code.
????ホストコードの最適化レベルを特定するだと。。。。。
なんと、Oオプションだとホストコードの最適化レベルしか与えられないようです。。。
CUDAのプログラムはホストコードとデバイスコードの2種類に分類することができます。ざっくりですが、下記のように考えてもらえばいいです。
CUDAを使う目的は、プログラムを並列化するためであるため、プログラマの関心はホストコードよりもむしろデバイスコードの処理速度に関心があるかと思います。
とりあえず、
nvccコマンドのOオプションではホストコードの最適化レベルを指定するのみで、
デバイスコードの最適化レベルを指定するものではないってことが(ドキュメント上では)わかりました。
そうなると色々と気になることがでてきますね。
気になることが山盛りですが、今日はこの辺で。
次回以降で突っ込んでいこうとおもいます。