小编sta*_*ter的帖子

将3d数组发送到CUDA内核

我把代码作为答案给出了如何使用嵌套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你能以我上面写的方式展示解决方案.谢谢!

c cuda gpu gpgpu

5
推荐指数
1
解决办法
5751
查看次数

比较C中的双重值

我有两个双数组,让我们说A和B.我想将他们的结果与7位有效数字进行比较.以下是否正确进行比较?

k = pow(10,7);
for(...)
{
 if(((int)A[i]*k)!=((int)B[i]*k))
 {
  ...
 }
}
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×2

cuda ×1

gpgpu ×1

gpu ×1