13

cudaArrayデバイスポインタと構造体の使用目的の違いについて混乱しています。誰かが私が一方を他方に対して使用する理由を説明してもらえますか?私の基本的な問題は、ドキュメントを読んで「CUDA by Example」という本を読んだ後、API設計者の意図が理解できないことです。

私が見たところ、cudaArrayテクスチャには使用する必要があり、メモリに直接アクセスするにはポインタを使用する必要があるようです。また、3Dテクスチャは。を使用してのみ作成できるようですcudaArray。すべてのテクスチャは?を使用して割り当てる必要がありますcudaArrayか?多くの例はそうではないようです。また、なぜ関数cudaMallocArrayとがありますcudaMallocArray3Dが、同等のものはありませcudaMallocArray2Dんか?逆に、とはありますが、cudaBindTextureありcudaBindTexture2DませんcudaBindTexture3Dか?

4

2 に答える 2

22

cudaArrayテクスチャへのバインド用に最適化された不透明なメモリブロックです。テクスチャは、空間充填曲線に格納されたメモリを使用できます。これにより、2D空間の局所性が向上するため、テクスチャキャッシュのヒット率が向上します。データをにコピーすると、cudaArrayそのような曲線にフォーマットされます。

したがって、にデータを格納することcudaArrayは、より良いテクスチャキャッシュヒット率を生み出すことができる最適化手法です。初期のCUDAアーキテクチャではcudaArray、カーネルからもアクセスできません。ただし、2.0以上のコンピューティング機能のアーキテクチャは、CUDAサーフェスを介してアレイにアクセスできます。

グローバルメモリでまたは通常のバッファを使用する必要があるかどうかの判断cudaArrayは、メモリの使用目的とアクセスパターンに依存します。プロジェクト固有になります。

cudaMallocArray()実際には2D配列を割り当てるので、問題は名前の一貫性がないことだと思います。多分それを呼ぶ方が論理的だったでしょうcudaMallocArray2D()

3Dテクスチャは使用していません。うまくいけば、誰かが答えて、なぜ必要がないのか教えてくれるでしょうcudaBindTexture3D()

于 2013-01-22T03:27:02.850 に答える
2

cudaBindTextureToArrayを使用でき、2Dと3Dの両方で機能します。

于 2016-05-18T10:50:17.967 に答える