私のプログラムは、3D 配列として表され、LabView から私のプログラムに送信されるビデオ ファイルを分析します。LabView は既にこの 3 次元配列を 1 次元配列にフラット化しているため、CUDA で 1 次元配列を割り当て、cudaMalloc を使用し、cudaMemcpy を使用してデータをコピーしました。しかし、2XXX を超える 120x240 ピクセル画像を送信している場合、いくつかの cuda メモリ関数 (cudamemcpy と cudafree は、いくつかのカーネルが呼び出された後にプログラムで発生します) から「不明なエラー」が発生していることに気付きました。これらは最終的に私のプログラムを壊します。ただし、画像を送信する場合は数値を下げても問題ありません。これにより、自分のコードは問題ないのに、メモリ割り当ての方法が間違っていると思い込んでしまいます。
まず、ピッチドメモリーについて話しましょう。私の知る限り、線形データが 2 つのチャンクに分割されないようにメモリを割り当てるのに適切なサイズを選択することがすべてです。これは、2 次元および 3 次元の配列で特に一般的です。これは、高速アクセスのために行または列をメモリ内に保持する必要があるためです。
ピッチドメモリーを使用しないと、このような問題が発生する可能性はありますか? ピッチド メモリを使用しない場合、特にこれらの非常に大きな配列の場合、どのような種類のエラーが発生する可能性がありますか? この時点まで、cudaMallocPitch と cudaMalloc3d を使用するオプションを無視してきましたが、技術的には 2 次元と 3 次元の配列を持っていて、それらをフラット化しました。
最後に、cudaGetLastError が「不明なエラー」しか通知しない場合、コードの問題をさらにデバッグするにはどうすればよいですか? どの関数に問題があるかを見つけることはできますが、cudaFree のようなものである場合、この種のものをデバッグしたり、問題の原因を突き止めたりする方法はありません。
とにかく、助けてくれてありがとう。