2011-12-20 10 views
0

私はCUDAを使って書いているプログラムに問題があります。私は、デバイスメモリにコピーする必要がある入力配列と出力配列を持っています。問題は、両方のアレイが大きすぎてデバイスメモリに収まらないことです。私が今やっていることは、入力と出力の両方の配列を分割し、カーネルを両方の部分に対して順番に実行することです。

このアプローチが機能するためには、cudaMemcpyFromArrayとcudaMemcpyToArrayがテクスチャメモリでのみ機能するように見えるため、中間配列を使用します。これにより、不必要なメモリコピー操作が発生します。誰かがより効率的な方法を知っていますか?CUDAの大きな入力の効率的なmemcpy?

答えて

0

アレイの1つのセグメント上の操作がアレイの別のセグメント上の操作と独立している場合は、非同期メモリコピーを使用できます。これは計算をしながら前後に物事をコピーするのに役立ちます。

いくつかの関数呼び出しは非同期です:デバイスが要求されたタスクを完了する前に、コントロールをホスト スレッドに返されたCUDA Cプログラミングガイドから。これらは次のとおりです。

  • カーネルが起動しました。
  • デバイスからデバイスへのメモリコピー。
  • 64 KB以下のメモリブロックのホストからデバイスへのメモリコピー。
  • Asyncの後に付いた関数によって実行されるメモリコピー。
  • メモリセット関数が呼び出されます。

仲間に役立つことを願っています。また、イネのコーディングを使用して配列を圧縮して、それらをフィットさせることも考えられます。

関連する問題