小弟想调试CUDA的程序,现在用GDB调试。但是有一个问题,不知道怎么解决。
#include <stdio.h>
#include <stdlib.h>
#define N 256
__global__ void bitreverse(unsigned int *data)
{
unsigned int *idata=data;
unsigned int x=idata[threadIdx.x];
x=((0xf0f0f0f0&x) >> 4 | ((0x0f0f0f0f&x) << 4));
x=((0xcccccccc&x) >> 2 | ((0x33333333&x) << 2));
x=((0x55555555&x) >> 1 | ((0x55555555&x) << 1));
idata[threadIdx.x]=x;
}
int main(int argc, char **argv)
{
unsigned int *d=NULL;int i;
unsigned int idata[N],odata[N];
for(i=0;i<N;i++)
idata[i]=(unsigned int)i;
cudaMalloc((void**)&d,sizeof(int)*N);
cudaMemcpy(d,idata,sizeof(int)*N,cudaMemcpyHostToDevice);
bitreverse<<<1,N>>>(d);
cudaMemcpy(odata,d,sizeof(int)*N,cudaMemcpyHostToDevice);
for(i=0;i<N;i++)
printf("%u->%u\n",idata[i],odata[i]);
cudaFree((void*)d);
return 0;
}
我在main和 bitreverse,以及idata[threadIdx.x]=x设置了断点的。但是我执行到第二个断点的时候,也就是执行到设备端代码的时候就有问题。报错如下:fatal: All CUDA devices are used for X11 and cannot be used while debugging. (error code = 24)
求高手指点!!!
ps:我的显卡是GT220