我運行CentOS版本5.9(最終)與CUDA,有一個特斯拉卡主要版本1和小版本3.以下是我的內核代碼:NVCC拒絕我使用malloc()在內核代碼的
__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
字節。
這給我的錯誤:
calling a host function("malloc") from a __device__/__global__ function("foo") is not allowed.
我能做些什麼來解決這個問題?
請提供一個實際產生上述錯誤的例子,以及如何編譯它。您的問題中的代碼不會編譯,但由於括號不平衡。此外,CC 1.3的設備不支持內核內存分配;你至少需要CC 2.0。另外,爲了從內核分配內存,你應該調用'malloc',而不是'cudaMalloc'(儘管根據你的錯誤信息,這就是你在實際代碼中所做的)。 – aland
謝謝你的指導 所以,你可以建議我任何解決同一個問題的另一種解決方案。 – sdy