我不能設法訪問我的常量內存中的數據,我不知道爲什麼。這是我的代碼片段:如何在我的內核中訪問我的常量內存?
#define N 10
__constant__ int constBuf_d[N];
__global__ void foo(int *results, int *constBuf)
{
int tdx = threadIdx.x;
int idx = blockIdx.x * blockDim.x + tdx;
if(idx < N)
{
results[idx] = constBuf[idx];
}
}
// main routine that executes on the host
int main(int argc, char* argv[])
{
int *results_h = new int[N];
int *results_d = NULL;
cudaMalloc((void **)&results_d, N*sizeof(int));
int arr[10] = { 16, 2, 77, 40, 12, 3, 5, 3, 6, 6 };
int *cpnt;
cudaError_t err = cudaGetSymbolAddress((void **)&cpnt, "constBuf_d");
if(err)
cout << "error!";
cudaMemcpyToSymbol((void**)&cpnt, arr, N*sizeof(int), 0, cudaMemcpyHostToDevice);
foo <<< 1, 256 >>> (results_d, cpnt);
cudaMemcpy(results_h, results_d, N*sizeof(int), cudaMemcpyDeviceToHost);
for(int i=0; i < N; ++i)
printf("%i ", results_h[i]);
}
出於某種原因,我只在result_h中得到「0」。我使用能力爲1.1的卡片運行CUDA 4.0。
任何想法?謝謝!