我正在阅读this article,它解释了统一内存,并且还通过了the code,但我唯一无法找到的是如果为了能够使用统一内存,我应该始终通过新的分配对象,得到运行时错误。CUDA的统一内存仅适用于堆中的变量吗?
我是否缺少CUDA的某些配置?我正在使用安装了CUDA 8.0的GTX 760。
class Object : Managed
{
Object(){//do something}
void foo() {//do something else}
};
__global__ void aKernel(Object& obj)
{
//do something in parallel with the object
}
int main()
{
Object o;
aKernel<<<b,t>>>(o);
cudaDeviceSynchronize();
o.foo(); // ERROR
Object* p = new Object;
aKernel<<<b,t>>>(*p);
cudaDeviceSynchronize();
p.foo(); // GOOD
}
回答将需要看到一些真实的代码。你的'Object'是否与文章中的'Managed'类一样? – talonmies