0

最近、最も内側のループに CUDA を使用するために、非常にブーストに依存するプロジェクトを拡張し始めました。私が見た奇妙な行動についてここに投稿する価値があると思いました。特定のブースト ヘッダーを含めるだけで、最初の cuda 呼び出しで多数のカーネルが生成されます。

次のコードをコンパイルしてデバッグする場合: simplestCase.cu

#include <boost/thread.hpp>

int main(int argc, char **argv){
int *myInt;
cudaMalloc(&myInt, sizeof(int));
return 0;
}

cudaMalloc を実行すると、次のデバッグ メッセージ行が表示されます (定義したカーネルを実行した場合と同じ動作です。コンテキスト作成をトリガーするものはすべて、これをトリガーするようです)。

[Launch of CUDA Kernel 0 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 1 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 2 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 3 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 4 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 5 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 6 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 7 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]
[Launch of CUDA Kernel 8 (memset32_post<<<(1,1,1),(64,1,1)>>>) on Device 0]

これまでのところ、問題を引き起こす 2 つのヘッダーを特定しました: boost/thread.hpp boost/mpi.hpp

問題を再現するのに役立つ情報を次に示します。

  • IDE: nSight Eclipse エディション
  • OS: Ubuntu 12.04 x64
  • GPU: GeForce GTX 580 (私の OS は GeForce GT 520 を使用していると思います)
  • ブースト ライブラリ: 1.52
  • cat /proc/driver/nvidia/version:
    • NVRM バージョン: NVIDIA UNIX x86_64 カーネル モジュール 310.32 Mon Jan 14 14:41:13 PST 2013
    • GCC バージョン: gcc バージョン 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

プロジェクト設定:

  • プロパティ - >ビルド - > CUDA - > DeviceLinkerMode =個別のコンパイル
  • プロパティ->ビルド->CUDA->GenerateGPUCode = 2.0
  • プロパティ -> ビルド -> 設定 -> ツール設定 -> NVCCLinker -> ライブラリ = boost_system
  • プロパティ -> 名前 = simplest_case_example

それがすべてだと思います。

編集:

私が質問をしていなかったという事実に注意を向けてくれてありがとう。重要なことを忘れていたことに気づきました。私の質問はこれです:

特に私はこれらのインクルードを使用していないため、周辺カーネル呼び出しの生成に非常に具体的なインクルードが含まれていることは奇妙に思えます。CUDA との対話にどのように影響するかわかりません。cuda は、私が使用していないコードのために、これほど多くの余分なカーネルを起動する必要がありますか? 現在取り組んでいるプロジェクトで 100 を超えるカーネルが起動されていますが、プロジェクトにある CUDA 関連のコードはプログラムのエントリ ポイントにある単一の cudaMalloc だけです。

編集2:

また、Tesla K20 (ケプラー アーキテクチャ カード、GTX 580 はフェルミだと思います) でも発生します。

編集3:

cuda ドライバーをバージョン 319.23 に更新しました。上記の動作に変更はありませんが、これにより、大規模なプログラムで発生していたデバッガーの問題が修正されました。

4

1 に答える 1