CUDA-GDB调试问题

cjyy2005 2011-12-28 09:17:29
小弟想调试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)
求高手指点!!!
...全文
418 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjyy2005 2011-12-29
  • 打赏
  • 举报
回复
尝试了下wcj0626的方法,确实可以。3Q!~
wcj0626 2011-12-29
  • 打赏
  • 举报
回复
LZ,我发现是怎么回事了。可能是显卡的问题,不支持同时多任务吧。你把图形界面给关了,进入文本模式去调试就可以了。
wcj0626 2011-12-28
  • 打赏
  • 举报
回复
帮顶,我也遇到了这样的问题。有人知道怎么解决不?

374

社区成员

发帖
与我相关
我的任务
社区描述
CUDA on Linux
社区管理员
  • CUDA on Linux社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧