>

nvcc -c를 사용하여 내 .cu 파일을 컴파일하려고하면 다음 오류가 발생합니다.

mag_cuda.cu (213) : 오류 : 식에 산술 또는 열거 형이 있어야합니다

여기에 주어진 GPU에 의해 수행 될 함수의 일부인 경우 해당 라인 :

__global__// all kernels are preceded by __global__ keyword
  void sum_all_indv_B(int No_poles, double *B_x, double *B_y, double 
*B_z, double *indv_B[][3])
  {
    // determine thread ID within block
    int index = blockIdx.x * blockDim.x + threadIdx.x;
    // determine stride of loop (more elements in array than threads)
    int stride = blockDim.x * gridDim.x;
    //loop over all the poles
    for(int counter_1 = index; counter_1 < No_poles; counter_1+=stride)
      {
    //sum the B field contribution from all poles in x,y and z directions
    B_x += indv_B[counter_1][0];
    B_y += indv_B[counter_1][1];
    B_z += indv_B[counter_1][2];
        //Divide total by number of Poles
    B_x = B_x/No_poles;
    B_y = B_y/No_poles;
    B_z = B_z/No_poles;
      }
  }

"B_x + = indv_B [counter_1] [0];"에서 오류가 발생했습니다. , "B_x = B_x/No_poles;" 비슷한 줄.

내가 생각하지 않는 아이디어는 무엇이든


  • 답변 # 1

    B_x  그리고 indv_B[i][j]   double 에 대한 포인터입니다  가치. 선언이 double *B_x 라고 가정  그리고 double *indv_B[][3]  맞습니다, *B_x += *indv_B[counter_1][0]; 를 사용하십시오 .

    또한 아래 줄을 바꿔야합니다 : *B_x = *B_x/No_poles; .

  • 이전 optimization - "고 대비"곡선을위한 빠른 공식
  • 다음 compiler construction - LLVM 백엔드를 작성하려고합니다 유용한 튜토리얼이 없습니다