web-dev-qa-db-ja.com

cuda.h、cuda_runtime.h、cuda_runtime_api.hの違い

私はCUDAでプログラミングを始めています。いくつかの例では、インクルードファイルcuda.hcuda_runtime.hおよびcuda_runtime_api.hコードに含まれています。誰かがこれらのファイルの違いを私に説明できますか?

31
Renan

非常に広い意味で:

  • cuda.hは、CUDAドライバーAPIのパブリックホスト関数とタイプを定義します。
  • cuda_runtime_api.hは、CUDAランタイムAPIのパブリックホスト関数とタイプを定義します
  • cuda_runtime.hは、cuda_runtime_api.hが行うすべてのこと、およびCUDA言語拡張とデバイス組み込み関数の組み込み型定義と関数オーバーレイを定義します。

API呼び出しを含むホストコンパイラーでコンパイルされるホストコードを記述している場合は、cuda.hまたはcuda_runtime_api.hのいずれかを含めます。タイプなどの他のCUDA言語の組み込みが必要で、ランタイムAPIを使用してホストコンパイラーでコンパイルする場合は、cuda_runtime.hを含めます。 nvccを使用してコンパイルされるコードを記述している場合、プログラマーの介入なしにnvccがすべての必要なヘッダーの組み込みを自動的に処理するため、それはすべて無関係です。

42
talonmies

@talonmiesの回答にいくつかの所見を追加したいと思います。

  • _cuda_runtime.h_は内部的に_cuda_runtime_api.h_を含みますが、逆は含みません。したがって、「runtimeにはすべてのruntime_apiが含まれます」は覚えておくべきニーモニックです。
  • _cuda_runtime_api.h_には、公式ドキュメントにあるランタイムAPI関数全体が含まれていませんが、_cuda_runtime.h_ willにはすべて含まれています(例:cudaEventCreate()) 。ただし、_cuda_runtime.h_で定義されたすべてのAPI呼び出しは、_cuda_runtime_api.h_の関数の呼び出しを使用して、ヘッダーファイル自体に実際に実装されます。これらは、@ talonmiesが言及した「関数オーバーレイ」です。
  • _cuda_runtime.h_は、C言語関数宣言のみを含むC言語ヘッダー(IIANM)です。 _cuda_runtime.h_は、いくつかのテンプレート関数が実装されたC++ヘッダーファイルです。
0
einpoklum