在 CUDA C Programming Guide Version 中有一小段关于内置向量类型。它说这个结构有 4 个组件,它们可以通过特定的方式访问, ei .x .y .z .w
。4个组成部分是什么?有人可以举个例子吗?
此外,它说通过这条线int2 make_int2(int x, int y);
,它构造了一个值为x,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行中使用的索引类型有什么联系?