2012-03-17 30 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 है, यही कारण है कि आपको त्रुटि मिल रही है। यदि आप विजुअल स्टूडियो का उपयोग करते हैं, तो लक्ष्य आर्किटेक्चर का चयन करने के लिए एक प्रोजेक्ट विकल्प होना चाहिए, हालांकि मैं आपको यह नहीं कह सकता कि इसे कहां मिलना है क्योंकि मैं इसे CUDA के साथ उपयोग नहीं करता हूं।

+2

बहुत बहुत धन्यवाद! वीएस -2010 में मैंने परियोजना -> {परियोजना का नाम} गुण-> CUDA सी/सी ++ -> डिवाइस -> [कोड जनरेशन]: compute_10, comp_10 compute_20, sm_20 और यह काम किया। – dvgvrco

+0

अपने कार्ड के लिए, आपको शायद SM_21 का उपयोग करना चाहिए, लेकिन मुझे नहीं पता कि यह कंपाइलर द्वारा उत्सर्जित कोड में बहुत अंतर करता है या नहीं। – talonmies