CUDAで高速化されたアルゴリズムを持つアプリケーションがあります。それの標準的なCPU実装もあります。このアプリケーションはさまざまなプラットフォーム向けにリリースされる予定であるため、ほとんどの場合、高速化されたCUDAコードを実行するためのNVIDIAカードはありません。私が欲しいのは、最初にユーザーのシステムにCUDA対応のNVIDIAカードがあるかどうかを確認し、ある場合は、後でCUDAランタイムを初期化することです。システムがCUDAをサポートしていない場合は、CPUパスを実行したいと思います。これ質問は私のものと非常に似ていますが、プレーンなCUDAランタイム以外のライブラリは使用したくありません。OpenCLは代替手段ですが、最初のリリースのアルゴリズムのOpenCLバージョンを実装するのに十分な時間はありません。CUDAの存在チェックがないと、CUDAランタイムに必要な.dllが見つからないため、プログラムは確実にクラッシュします。これは絶対に必要ありません。したがって、この初期化ステップを処理する方法についてのアドバイスが必要です。
1 に答える
5
呼び出しcudaGetDeviceCount
を使用cudaGetDeviceProperties
して、実行中のシステム上のCUDAデバイスを検索します。最初にいくつあるかを調べてから、使用可能なすべてのデバイスをループし、プロパティを調べて、どのデバイスが適格かを判断します。「資格を得る」とは、アプリケーションによって異なります。特定の計算機能が必要ですか?または、一定量のメモリが必要ですか?複数のデバイスがある場合は、いくつかの基準で並べ替えてから、デバイスを設定することをお勧めしますcudaSetDevice
。デバイスがない場合、または十分なデバイスがない場合は、CPUコードパスにフォールバックします。
また、ドライバーの問題や古いボードなどが原因で一部のユーザーの環境が機能しない場合に備えて、CUDAモードを強制的にオフにするメカニズムを用意することをお勧めします。コマンドラインオプション、環境変数、その他何でも使用できます...
編集:DLLに関しては、アプリケーションにcudart[whatever].dllをパッケージ化する必要があります。これにより、プログラムが確実に起動し、少なくともCUDAクエリ関数が動作します。
于 2012-09-24T17:17:10.727 に答える