我試圖讓這樣somtehing(其實我需要寫一些集成功能)的CUDACuda的函數指針
我試過,但它並沒有工作 - 它不僅造成。
Error: Function pointers and function template parameters are not supported in sm_1x.
float f1(float x) {
return x;
}
__global__ void tabulate(float lower, float upper, float p_function(float), float*result){
for (lower; lower < upper; lower++) {
*result = *result + p_function(lower);
}
}
int main(){
float res;
float* dev_res;
cudaMalloc((void**)&dev_res, sizeof(float)) ;
tabulate<<<1,1>>>(0.0, 5.0, f1, dev_res);
cudaMemcpy(&res, dev_res, sizeof(float), cudaMemcpyDeviceToHost) ;
printf("%f\n", res);
/************************************************************************/
scanf("%s");
return 0;
}
您使用什麼卡?您似乎將您的代碼編譯爲計算能力1.x,並且我認爲函數指針是一個計算能力2.x功能。你可以改變你的nvcc調用,使其具有-gencode arch = compute_20,code = sm_20(如果你的卡支持它) – alrikai 2013-03-26 18:30:29
@alrikai GeForce 560Ti – DanilGholtsman 2013-03-26 19:38:40
然後,你應該改變你的編譯從1.x到2.x,這將擺脫你的編譯錯誤。然而,你可能仍然有一些運行時問題... – alrikai 2013-03-26 20:00:00