2012-03-17 73 views
8

即使我有費米卡(GTX 560)我得到這個錯誤在VS2010:CUDA 4.1 printf()的錯誤

error : calling a host function("printf") from a __device__/__global__ function("kernel") is not allowed 

代碼:

#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 

#include <stdio.h> 

__global__ void kernel() 
{ 
    printf("hello"); 
} 

int main() 
{ 
    kernel<<<1, 1>>>(); 
    return 0; 
} 

我失去了一些東西在這裏?

回答

13

您需要確保編譯正確的架構。只有Fermi和Kepler卡(所以計算能力2.0,2.1,3.0和3.5設備)在內核中支持printf。如果你編譯你的代碼是這樣的:

nvcc -arch=sm_21 [other options] ..... 

代碼應該正確構建。默認架構是compute 1.0,這就是爲什麼你會收到錯誤。如果您使用Visual Studio,應該有一個項目選項來選擇目標體系結構,但我無法準確告訴您在哪裏可以找到,因爲我沒有將它用於CUDA。

+2

非常感謝!在VS2010中,我改變了項目 - > {項目名稱}屬性 - > CUDA C/C++ - >設備 - > [代碼生成]:compute_10,sm_10到compute_20,sm_20並且工作。 – dvgvrco 2012-03-17 12:12:39

+0

對於您的卡,您應該使用sm_21,但我不知道它是否與編譯器發出的代碼有很大區別。 – talonmies 2012-03-17 13:48:57