【发布时间】:2013-08-22 09:22:20
【问题描述】:
我有一个简单的内核,我在其中使用 malloc 分配一些空间,就像:
__global__ void chainKernel() {
float* __restrict__ boo = (float*)malloc(sizeof(float));
*boo = 0;
*boo = *boo + 100;
return;
}
如果我在*boo = *boo + 100 上设置断点,我就看不到 *boo 的内容。相反,我在调试器窗口中的变量旁边得到Operation is not valid due to the current state of the object。但是,如果我删除 __restrict__,则该值将正确显示。这是正常行为吗?
我的系统:CUDA 5.5.20、Nsight 3.1.0.13141、Windows 7 x64、VS2010、GeForce GTX Titan。
【问题讨论】:
-
不确定,但
__restrict__关键字的意义在于避免指针别名,也许NSight 需要创建别名……我猜这是正常行为。 -
@Michael:所以如果我想调试我必须重新定义
#define __restrict__?