CUDA C プログラミング ガイド バージョンには、組み込みベクトル型に関する小さな段落があります。この構造には 4 つのコンポーネントがあり、特定の方法 ei でアクセスできると書かれています.x .y .z .w
。4つの成分とは?誰かが例を挙げることができますか?
さらに、この行を使用して、値x、yint2 make_int2(int x, int y);
を持つベクトルを構築すると述べています。これらの変数にはそれぞれ 4 つのコンポーネントがありますか?
これらのことを理解しようとしている理由は、次のコードを勉強しているためです。
/*1*/ int ny = num_ofElements_y_ofmyMatrix;
/*2*/ int nx = num_ofElements_x_ofmyMatrix;
/*3*/ int2 matrix_index_2d = make_int2( ( blockIdx.x * blockDim.x ) + threadIdx.x, ( blockIdx.y * blockDim.y ) + threadIdx.y );
/*4*/ int matrix_index_1d = ( nx * matrix_index_2d.y ) + matrix_index_2d.x;
/*5*/ if ( matrix_index_2d.x < nx && matrix_index_2d.y < ny )
/*6*/ {
/*7*/ float r = myMatrix[ matrix_index_1d ];
/*8*/ }
3行目と4行目のインデックス作成はどのように機能していますか? 続いて、行列myMatrixへのアクセスは誰が行っているのでしょうか?
アップデート:
コードスニペットに関する限り、通常、配列にアクセスするときは次を使用しています。
col = blockDim.x*blockIdx.x + threahIdx.x;
row = blockDim.x*blockIdx.x + threahIdx.x;
if (col < NUMCOLS && row < NUMROWS){...}
C ++で配列の行優先アクセスを行うためmyMatrix[row*NUMCOLS + col]
。
3行目と4行目で使用されているインデックスの種類との関係は何ですか?