2016-07-27 16 views
0

私は現在、OpenGLコンテンツをストリームするためにNVIDIA NVenc-APIでCUDAを使用するアプリケーションを作成しています。私はcuInit(0)を呼び出すことに気付きました - 多くのチュートリアルによると、Cudaを初期化するための最初の呼び出しとして実行する必要がありますが、私のCuda Kernelの成功は変わりません。だから私はそれを呼び出すかどうかに関係なく、プログラムは両方のシナリオで実行されます。cuInit(0)はもう必要ありませんか?

変更しましたか?私はいくつかの情報を探していましたが、これについて何も見つかりませんでした。

ありがとうございます!

ビット詳細に: - ランタイムAPI

最初のステップは、cudaSetDevice()を使用してのCUDAデバイスを作成することです。 第2ステップ:cuCtxCreate() - ドライバAPIを使用してコンテキストを作成します。 その後、cudaMalloc()で割り当てられたcuda配列を持つ3重シェブロン構文を使ってカーネルを起動できます。

+1

CUDAドライバまたはランタイムAPIを使用していますか? – talonmies

+0

両方のAPIが動作します。 – Christoph

+0

それは私が尋ねたものではありません。あなたのコードはランタイムAPIまたはドライバAPIを使用していますか? NVenc自体はCUDAと関係がなく、CUDAコンテキストを実行する必要はありません。 – talonmies

答えて

1

あなたのコードの最初の呼び出しが、cudaSetDevice()であり、CUDAバージョンがCUDA 4以降であれば、暗黙的にコンテキストが確立され、CUDAを作成するためのその他の作業は必要ありませんランタイムAPIセッションが正常に動作します。

cuCtxCreateまたはcuInitとする必要があります。ランタイムAPIとドライバAPIの両方を使用するという本来の要求がある場合は、supported and documentedメソッドがあります。経験則は、ドライバAPI またはランタイムAPIのいずれかを使用することですが、その両方ではなく、ドライバAPIを使用する理由がない場合は使用しないでください。ランタイムAPIは、よりシンプルで、よりクリーンで、冗長ではありません。

+0

ありがとう、ありがとう。ですから、有効なCudaContextのハンドルが必要な場合は、ドライバapiを使用し、実行時APIを呼び出すたびに省略する必要がありますか? – Christoph

+0

いいえ、ドライバAPI機能が必要な場合でも、APIを混在させても問題ありませんが、私の答えのリンクに記載されているプロセスに従ってください:ドライバAPIを使用してコンテキストを作成し、そのような使用例で最初の呼び出しとして 'cuInit(0)'を呼び出さなければなりません) – talonmies

+0

たくさん助けられました!ありがとう。 – Christoph

関連する問題