0
爲整數分配內存我想在2個2D陣列,1個維數組和2點的整數cudaMlloc(),這樣我可以在我的內核用它來傳遞時得到錯誤。二維數組是雙精度的,其他是int。而1d數組包含浮點數。我不斷收到錯誤「沒有重載函數CudaMalloc的實例相匹配的參數list.argument類型有:(INT,INT)。我不知道我在做什麼錯 內核和我用它的方式是如下:CUDA,試圖在設備
__global__ void getMatrix(double** cmatrix,int** data,float* angle,int x,int y){
int j = blockIdx.x * blockDim.x + threadIdx.x;
int i = blockIdx.y * blockDim.y + threadIdx.y;
int xrad,yrad;
xrad = 0;
yrad = 0;
xrad = (int)round(cos(angle[i]) * (j+1) + x);
yrad = (int)round(sin(angle[i]) * (j+1) + y);
cmatrix[i][j] = (double)data[yrad-1][xrad-1];
}
和實現是:
int dataFileSize = 801 * 1201 * sizeof(int);
int cmatrixSize = ANGLESIZE * RADIUS/RADSTEP * sizeof(double);
int xVarSize = sizeof(int);
int yVarSize = sizeof(int);
int** d_data;
cudaMalloc(&d_data,dataFileSize);
double** d_cmatrix;
cudaMalloc(&d_cmatrix,cmatrixSize);
float * d_angle;
cudaMalloc(&d_angle,sizeof(float) * ANGLESIZE);
int *d_x;
cudaMalloc((void**)&d_x,xVarSize);
int *d_y;
cudaMalloc((void**)d_y,yVarSize);
cudaMemcpy(d_data,data,dataFileSize,cudaMemcpyHostToDevice);
cudaMemcpy(d_cmatrix,cmatrix,cmatrixSize,cudaMemcpyHostToDevice);
cudaMemcpy(d_angle,angle,sizeof(float) * ANGLESIZE,cudaMemcpyHostToDevice);
cudaMemcpy(d_x,&x,xVarSize,cudaMemcpyHostToDevice);
cudaMemcpy(d_y,&y,yVarSize,cudaMemcpyHostToDevice);
const dim3 blockSize(ANGLESIZE,1,1);
const dim3 threadSize(1,RADIUS/RADSTEP,1);
getMatrix<<<blockSize,threadSize>>>(d_cmatrix,d_data,d_angle,d_x,d_y);
cudaMemcpy(cmatrix,d_cmatrix,cmatrixSize,cudaMemcpyDeviceToHost);
cudaFree(d_data);
cudaFree(d_cmatrix);
cudaFree(d_angle);
cudaFree(d_x);
cudaFree(d_y);