我把代码作为答案给出了如何使用嵌套for循环添加两个2d(音调)数组?并尝试将其用于3D而不是2D,并稍微更改了其他部分,现在看起来如下:
__global__ void doSmth(int*** a) {
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
for(int k=0; k<2; k++)
a[i][j][k]=i+j+k;
}
int main() {
int*** h_c = (int***) malloc(2*sizeof(int**));
for(int i=0; i<2; i++) {
h_c[i] = (int**) malloc(2*sizeof(int*));
for(int j=0; j<2; j++)
GPUerrchk(cudaMalloc((void**)&h_c[i][j],2*sizeof(int)));
}
int*** d_c;
GPUerrchk(cudaMalloc((void****)&d_c,2*sizeof(int**)));
GPUerrchk(cudaMemcpy(d_c,h_c,2*sizeof(int**),cudaMemcpyHostToDevice));
doSmth<<<1,1>>>(d_c);
GPUerrchk(cudaPeekAtLastError());
int res[2][2][2];
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
GPUerrchk(cudaMemcpy(&res[i][j][0],
h_c[i][j],2*sizeof(int),cudaMemcpyDeviceToHost));
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
for(int k=0; k<2; k++)
printf("[%d][%d][%d]=%d\n",i,j,k,res[i][j][k]);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我使用2作为h_c的每个维度的大小,在实际实现中,我将具有非常大的这些大小,并且对于"int***"或更多维度的子阵列的每个部分具有不同的大小.我在内核调用之后遇到问题,我尝试将结果复制回res数组.你能帮我解决这个问题吗?Plz你能以我上面写的方式展示解决方案.谢谢!
我有两个双数组,让我们说A和B.我想将他们的结果与7位有效数字进行比较.以下是否正确进行比较?
k = pow(10,7);
for(...)
{
if(((int)A[i]*k)!=((int)B[i]*k))
{
...
}
}
Run Code Online (Sandbox Code Playgroud)