我正在閱讀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