NVCC

2013-02-12 42 views
12

साथ संकलक चेतावनी को अक्षम कैसे मैं एक विशिष्ट संकलक nvcc साथ चेतावनी को अक्षम करना चाहते हैं, विशेष रूपNVCC

चेतावनी: शून्य संदर्भ अनुमति नहीं है

कोड मैं पर काम कर रहा हूँ NULL संदर्भ का उपयोग करता है SFINAE का हिस्सा हैं, इसलिए उन्हें टाला नहीं जा सकता है।

एक आदर्श समाधान #pragma केवल स्रोत फ़ाइल में होगा जहां हम चेतावनियों को अक्षम करना चाहते हैं, लेकिन एक कंपाइलर ध्वज भी ठीक होगा, अगर कोई प्रश्न में चेतावनी को बंद करने के लिए मौजूद है।

संपादित करें: मैं एनवीआईडीआईए से किसी के संपर्क में रहा हूं, और उन्होंने मुझे बताया कि वर्तमान में डिवाइस कंपाइलर से आने वाली चेतावनियों को अक्षम करने के लिए कोई विधि नहीं है। मैं एक परिणाम के रूप में इस प्रश्न को बंद करने के लिए जा रहा हूँ

-Xcompiler -Wnonull

: मेजबान संकलक से चेतावनी के लिए आप निम्नलिखित झंडे की तरह कुछ का उपयोग कर सकते हैं।

+0

आप कर सकते हैं 'google' कि, या' nvcc' मैनुअल पढ़ने को दबाने के लिए कर सकते हैं। 'Nvcc --help' टाइप करके –

+1

मैं देख सकता हूं कि एक 'अक्षम करने योग्य चेतावनी' विकल्प या समान रूप से' -w' है। –

+0

धन्यवाद @ Soroosh129। मैं अपने प्रश्न को और अधिक विशिष्ट बनाने के लिए संपादित करूंगा: मुझे सभी चेतावनी संदेशों को बंद करने की तुलना में अधिक बढ़िया नियंत्रण के साथ कुछ चाहिए, क्योंकि चेतावनी अच्छी बात है! दुर्भाग्य से मैं Google का उपयोग करके या मैन्युअल को देखकर इसे नहीं ढूंढ पाया। – bcumming

उत्तर

15

एनवीसीसी के साथ डिवाइस पर विशिष्ट चेतावनियों को अक्षम करना वास्तव में संभव है। यह समझने के लिए मुझे उम्र लग गई कि इसे कैसे किया जाए।

आपको this page पर सूचीबद्ध टोकन के साथ -Xcudafe ध्वज का उपयोग करने की आवश्यकता है। उदाहरण के लिए, "अभिव्यक्ति को नियंत्रित करने स्थिर है" चेतावनी निष्क्रिय करने के लिए, पारित NVCC के लिए निम्न:

-Xcudafe "--diag_suppress=boolean_controlling_expr_is_constant" 

अन्य चेतावनी के लिए, ऊपर link देखते हैं।

+0

मैं इसे विजुअल स्टूडियो 2012 और CUDA 5.5 के साथ सेट करने में सक्षम नहीं हूं। 4.2 और पुराने स्टूडियो के साथ यह काम करता है। बीटीवी devtalk.nvidia.com पर इस मुद्दे (यहां के समान निष्कर्ष के साथ) के बारे में एक चर्चा हुई थी। देखें: https://devtalk.nvidia.com/default/topic/370952/disable-a-warning-/ – hthms

+0

@ user2333829: cudafe आपके द्वारा उल्लिखित सूची में से कई (कई?) अन्य टोकन को छोड़ देता है, साथ ही मैं ' मुझे यकीन नहीं है कि यह वास्तव में उस सूची में सब कुछ स्वीकार करेगा। क्या आपने उनमें से अधिकांश की कोशिश की है? – einpoklum

+0

यह उत्तर देवता है यदि आप ईजिन जैसी लाइब्रेरी शामिल करते हैं क्योंकि नियंत्रण अभिव्यक्ति चेतावनी स्पैम किसी अन्य चेतावनी को प्रभावी ढंग से असंभव बनाता है। – Mranz

1

मैं अपनी चेतावनी के लिए -Xcudafe मिलान करने के लिए संघर्ष कर रहा था। तो यहाँ एक और तरीका है।

आप CL.exe पर एक कंपाइलर ध्वज पास कर सकते हैं जो एक विशिष्ट चेतावनी को अक्षम कर देगा। उदाहरण के लिए, अनचेक इटरेटर्स के बारे में चेतावनियों को अक्षम करने के लिए आप /wd4996 पास कर सकते हैं।

warning C4996: 'std::_Copy_impl': Function call with parameters that may be 
unsafe - this call relies on the caller to check that the passed values are 
correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See 
documentation on how to use Visual C++ 'Checked Iterators' 

यहाँ मुश्किल बात यह है कि डिफ़ॉल्ट रूप से होस्ट संकलक सेटिंग्स से तर्क nvcc के लिए पारित नहीं कर रहे हैं है, तो आप CUDA C/C++ संवाद के माध्यम से जोड़ने की आवश्यकता है।

enter image description here

0

आप w ध्वज का उपयोग चेतावनी nvcc -w