2012-03-17 9 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

正しいアーキテクチャでコンパイルしていることを確認する必要があります。フェルミとケプラーのカード(コンピューティング機能2.0、2.1、3.0、3.5デバイス)だけがprintfをカーネルでサポートします。あなたのコードを次のようにコンパイルすると:

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

コードが正しく構築されます。デフォルトのアーキテクチャーは1.0を計算するため、エラーが発生しています。 Visual Studioを使用している場合は、対象のアーキテクチャを選択するプロジェクトオプションが必要ですが、CUDAで使用しない場所を正確に見つけることはできません。

+2

ありがとうございます! VS2010では、プロジェクト - > {プロジェクト名}プロパティ - > CUDA C/C++ - >デバイス - > [コード生成]:compute_10、sm_10をcompute_20、sm_20に変更しました。 – dvgvrco

+0

あなたのカードにはおそらくsm_21を使うべきですが、コンパイラが発行するコードと大きな違いがあるかどうかはわかりません。 – talonmies