2009-11-11 10 views
5

पर लगातार चेतावनी मैं इस तरह ज़ोर बयान पर चेतावनी controlling expression is constant मिलती है:CUDA: NVCC अभिव्यक्ति को नियंत्रित करने देता है ज़ोर

assert(... && "error message"); 

क्यों इस ज़ोर पर यह चेतावनी? मैं इस चेतावनी को कैसे दबा सकता हूं?

NVCC, NVIDIA CUDA संकलक है मैं इसे LLVM पर आधारित है लगता है। यह चेतावनी क्यों देता है, जब यह जीसीसी या विजुअल सी ++ कंपाइलर्स के साथ ठीक से संकलित होता है?

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wmultichar" 

char b = 'df'; // no warning. 

#pragma clang diagnostic pop 

Controlling Diagnostics via Pragmas से:

+0

संकलक NVCC2.0 संदर्भ के अनुसार लिनक्स पर जीसीसी के लिए डिफ़ॉल्ट चाहिए। –

+0

और जीसीसी (कम से कम 3.4.4 और 4.3.2) ऐसी चेतावनियां नहीं देते हैं। शायद '#ifdef __GNUC__'/'__GNUG__' के माध्यम से कंपाइलर को सत्यापित करने का प्रयास करें? –

+0

मैं भी चेतावनी पुन: पेश नहीं कर सकते हैं और मैं नहीं जीसीसी कि चेतावनी को दबाने के लिए किसी भी झंडे पड़ता है। अजीब। –

उत्तर

3

एक पोर्टेबल विकल्प (संभवतः एक मैक्रो में लिपटे) होगा कुछ की तरह:

{ 
    const bool error_message = true; 
    assert([...] && error_message); 
} 

स्पष्ट करने के लिए मैं क्या मतलब:

:

#define myAssert(msg, exp) { const bool msg(true); assert(msg && (exp)); } 
// usage: 
myAssert(ouch, a && b); 

... जैसे देता है

अभिकथन "आउच & & (एक & & बी) "असफल [...]

0

यदि यह LLVM आधारित है, तो आप कुछ इस तरह उपयोग कर सकते हैं।

1

मैं इस सटीक समस्या में पड़ गए और अंत में डिवाइस पर चेतावनी निष्क्रिय करने के लिए एक रास्ता मिल गया। यहां विवरण हैं ...

एक विशिष्ट चेतावनी को अक्षम करने के लिए, आपको इस पृष्ठ पर सूचीबद्ध टोकन के साथ -Xcudafe ध्वज का उपयोग करने की आवश्यकता है (http://www.ssl.berkeley.edu/~jimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/locale/en_US/mcpcom.msg)। उदाहरण के लिए, "अभिव्यक्ति को नियंत्रित करने स्थिर है" चेतावनी निष्क्रिय करने के लिए, पारित NVCC के लिए निम्न:

-Xcudafe "--diag_suppress = boolean_controlling_expr_is_constant"

यह मेरे लिए काम किया! अन्य चेतावनियों के लिए, उपर्युक्त लिंक देखें।

2

कहीं अपने कोड की शुरुआत के निकट निम्नलिखित जोड़ें:

#pragma diag_suppress boolean_controlling_expr_is_constant 

ध्यान दें कि यह सब के लिए संकलक चेतावनी को दबाने होगा न सिर्फ अपने दावे के साथ जुड़े चेतावनी "अभिव्यक्ति को नियंत्रित करने स्थिर है",।

मुझे कभी-कभी संकलन समय पर निर्धारित स्थिरांक (या व्युत्पन्न) की जांच करते समय यह चेतावनी मिलती है, इसलिए मेरे अनुभव में चेतावनी आमतौर पर सौम्य और अनदेखा करने के लिए ठीक है।

+1

तुम भी साथ '#pragma diag_warning boolean_controlling_expr_is_constant' चेतावनी चालू कर सकते हैं। हालांकि, ये 'प्रज्ञा' डिवाइस कोड में नहीं हो सकती हैं।जहां तक ​​CUDA टूलकिट जाता है, वे पूरी तरह से अनियंत्रित होते हैं, इसलिए अगर वे एक दिन काम करना बंद कर देते हैं तो मुझे आश्चर्य नहीं होगा ... – Sam

संबंधित मुद्दे