GPU(nvidia geforce 310m)で実行されるプログラムをCUDAで作成しました。カーネルでは、atomicMin 関数を使用しました。コンパイルして実行すると、「カーネルの実行に失敗しました: <8> 無効なデバイス関数」というエラーが表示されました。私のカードがアトミック操作をサポートしていないことが原因である可能性があると思います。私は正しいですか、それとも他に考慮すべきことがありますか?ちなみに、Visual Studio で変更する必要があることを読んだアトミック操作を実行するには: プロジェクト プロパティ -> CUDA C/C++ -> デバイス -> コード生成 -> compute_13、sm_13。ありがとう。
2 に答える
お使いの GPU が、sm_13
コンパイル対象のコンピューティング アーキテクチャ ( ) と一致していない可能性があります。
のエラー コード 8 の説明はdriver_types.h
次のとおりです。
/**
* The requested device function does not exist or is not compiled for the
* proper device architecture.
*/
cudaErrorInvalidDeviceFunction = 8,
これの一般的な理由は、コンパイルされたバイナリ アーキテクチャがデバイス アーキテクチャと一致しないことです。使用している GPU については言及していませんが、sm_13
デバイスではないと思います。
cuda deviceQuery サンプル コードを実行することで、使用している GPU デバイスとそのコンピューティング アーキテクチャと機能を確認できます。
さまざまなアトミック操作に必要なコンピューティング アーキテクチャの詳細については、ドキュメントを参照してください。関数のいくつかのバージョンを含め、一部のアトミック関数はsm_11
(compute 1.1) アーキテクチャで利用可能であることに注意してくださいatomicMin
。
編集: GPU が GeForce 310m デバイスであることを示しているという事実に基づいて、これはコンピューティング 1.3 対応デバイスではありません。したがって、指定しても機能しsm_13
ません。お使いのGeForce 310m はコンピューティング 1.2 デバイスであるため、そのアーキテクチャ (sm_12) を指定すると、その方法で正常にコンパイルされたコードを実行できるはずです。
アトミックに関しては、コンピューティング 1.2 デバイスは、特定のバージョンの を含む特定のアトミック操作をサポートしていますatomicMin
。コードを見せていないので、それ以上のことは言えません。
コンピューティング機能 1.3 を備えた CUDA デバイスは、アトミック操作をサポートします。次のフラグを使用してコードをコンパイルしてみてください
-arch sm_13