【发布时间】:2013-05-27 02:17:07
【问题描述】:
我正在使用 CUDA 运行 CentOS 版本 5.9(最终版),拥有一张主要版本 1 和次要版本 3 的 Tesla 卡。以下是我的内核代码:
__global__ void foo(int* pos, int t)
{
int index = blockDim.x * blockIdx.x + threadIdx.x;
t = pos [index + 1] - pos [index];
char* temp = (char*)malloc(t);
}
我想动态分配t 字节。
这给了我错误:
不允许从 __device__/__global__ 函数(“foo”)调用宿主函数(“malloc”)。
我能做些什么来解决这个问题?
【问题讨论】:
-
请提供一个实际产生上述错误的示例以及您如何编译它。您问题中的代码无法编译,但由于括号不平衡。此外,具有 CC 1.3 的设备不支持从内核内部分配内存;您至少需要 CC 2.0。此外,要从内核分配内存,您应该调用
malloc,而不是cudaMalloc(不过,根据您的错误消息,这是您在实际代码中所做的)。 -
感谢您的指导,您能建议我解决同样的问题吗?
标签: cuda