cuda-gdb调试问题

小弟想调试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

cuda-GDB单卡的话需要关闭x-server,你试试:init 3.

可以退出X,然后运行gdb

谢谢两位的答复,确实是需要这样的。发现国内的论坛上发帖回复的人比较,以后有什么问题还是直接去Nvidia的论坛里发帖求救了。