CUDA मेरे gcc संस्करण के साथ असंगत है


102

मुझे CUDA SDK के साथ भेजे गए कुछ उदाहरणों के संकलन में परेशानी है। मैंने डेवलपर्स ड्राइवर (संस्करण 270.41.19) और क्यूडा टूलकिट स्थापित किया है, फिर अंत में एसडीके (दोनों 4.0.17 संस्करण)।

प्रारंभ में यह सभी देने में संकलित नहीं था:

error -- unsupported GNU version! gcc 4.5 and up are not supported!

मैंने 81 में लाइन को जिम्मेदार पाया: /usr/local/cuda/include/host_config.h और इसे बदल दिया गया:

//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)

उस बिंदु से मुझे संकलन करने के लिए केवल कुछ उदाहरण मिले, यह इसके साथ बंद हो जाता है:

In file included from /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr.h:162:0,
             from /usr/include/c++/4.6/ext/atomicity.h:34,
             from /usr/include/c++/4.6/bits/ios_base.h:41,
             from /usr/include/c++/4.6/ios:43,
             from /usr/include/c++/4.6/ostream:40,
             from /usr/include/c++/4.6/iterator:64,
             from /usr/local/cuda/include/thrust/iterator/iterator_categories.h:38,
             from /usr/local/cuda/include/thrust/device_ptr.h:26,
             from /usr/local/cuda/include/thrust/device_malloc_allocator.h:27,
             from /usr/local/cuda/include/thrust/device_vector.h:26,
             from lineOfSight.cu:37:
/usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr-default.h:251:1: error: pasting         "__gthrw_" and "/* Android's C library does not provide pthread_cancel, check for
`pthread_create' instead.  */" does not give a valid preprocessing token
make[1]: *** [obj/x86_64/release/lineOfSight.cu.o] Error 1

जैसा कि कुछ उदाहरण हैं, मैं समझता हूं कि यह एक ड्राइवर की समस्या नहीं है, बल्कि एक असमर्थित एफसीसी संस्करण के साथ कुछ करना होगा। डाउनग्रेडिंग एक विकल्प नहीं है क्योंकि gcc4.6 में इस बिंदु पर निर्भरता के रूप में एक पूरी प्रणाली है ...


4
भविष्य के पाठकों के लिए: सुनिश्चित करें कि आप CUDA के नवीनतम संस्करण का उपयोग कर रहे हैं (जब तक कि आपको पूरी तरह से शुरुआती का उपयोग न करना पड़े)। NVIDIA लगभग हर रिलीज के साथ अधिकतम समर्थित संकलक संस्करण को अप करता है।
einpoklum

यह CUDA 10 के साथ उन लोगों के लिए मददगार हो सकता है और बहुत अधिक
गन्न

जवाबों:


114

जैसा कि पहले ही बताया गया है, nvcc gcc 4.4 पर निर्भर करता है। Nvcc को संस्थापन के साथ बनाए गए बिन डाइरेक्टरी में सॉफ्टलिंक्स को जोड़कर बिना किसी कंपाइलर पैरामीटर के सही तरीके से उपयोग करने के लिए nvcc को कॉन्फ़िगर करना संभव है।

डिफ़ॉल्ट क्यूडा बाइनरी डायरेक्टरी (इंस्टॉलेशन डिफॉल्ट) / usr / लोकल / कोडा / बिन है, इस डायरेक्टरी से gcc के सही वर्जन में सॉफ्टलिंक जोड़ना पर्याप्त है:

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc


2
"अपडेट-अल्टरनेटिव्स" कमांड भी मदद कर सकता है, खासकर जब CUDA 5.0 स्थापित कर रहा है
21.337 पर फोएड

4
मुझे g ++ के सही संस्करण में एक प्रतीकात्मक लिंक भी जोड़ना था।
अरोन

17
मुझे g ++ से भी लिंक करना था। अन्यथा, सरल nvccआमंत्रण काम करते हैं, लेकिन कहते हैं, को लागू करने makeCUDA नमूने के लिए, जल्द ही के साथ शुरू आमंत्रण में लाता है: nvcc -ccbin g++। मेरे लिए मैं का इस्तेमाल किया sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gccऔर sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++
user2023370

8
यदि आप के साथ संकलन cmake .. && makeआप कोशिश कर सकते हैं cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make। यदि आप सादे का उपयोग करते हैं तो आप कोशिशMakefile कर सकते हैं । make CXX=g++-4.4 CC=gcc-4.4
patryk.beza 18

1
जब मैं इस कमांड को आज़माता हूं, तो यह "फ़ाइल मौजूद है" कहता है और लिंक का प्रदर्शन नहीं करता है। कोई मदद ?
Sentient07

59

gcc 4.5 और 4.6 CUDA के साथ समर्थित नहीं हैं - कोड संकलित नहीं करेगा और बाकी टूलचिन, जिसमें cuda-gdb शामिल है, ठीक से काम नहीं करेगा। आप उनका उपयोग नहीं कर सकते, और प्रतिबंध गैर-परक्राम्य है।

आपका एकमात्र समाधान दूसरे संकलक के रूप में gcc 4.4 संस्करण स्थापित करना है (अधिकांश वितरण इसकी अनुमति देगा)। Nvcc का एक विकल्प है --compiler-bindirजिसका उपयोग वैकल्पिक संकलक को इंगित करने के लिए किया जा सकता है। एक स्थानीय निर्देशिका बनाएं और फिर समर्थित gcc संस्करण के निष्पादनयोग्य के लिए प्रतीकात्मक लिंक बनाएं। --compiler-bindirविकल्प के माध्यम से nvcc करने के लिए उस स्थानीय निर्देशिका को पास करें , और आपको अपने बाकी सिस्टम को प्रभावित किए बिना CUDA कोड संकलित करने में सक्षम होना चाहिए।


संपादित करें :

ध्यान दें कि यह प्रश्न और उत्तर CUDA 4 से संबंधित है।

चूंकि यह लिखा गया था, NVIDIA ने नए CUDA टूलचैन रिलीज में बाद के जीसीसी संस्करणों के लिए समर्थन का विस्तार जारी रखा है

  • CUDA 4.1 रिलीज के रूप में, gcc 4.5 अब समर्थित है। gcc 4.6 और 4.7 असमर्थित हैं।
  • CUDA 5.0 रिलीज के रूप में, gcc 4.6 अब समर्थित है। gcc 4.7 असमर्थित है।
  • CUDA 6.0 रिलीज के रूप में, gcc 4.7 अब समर्थित है।
  • CUDA 7.0 रिलीज के अनुसार, gcc 4.8 पूरी तरह से समर्थित है, जो Ubuntu 14.04 और फेडोरा 21 पर 4.9 का समर्थन करता है।
  • CUDA 7.5 की रिलीज के अनुसार, gcc 4.8 पूरी तरह से समर्थित है, जो Ubuntu 14.04 और Fedora 21 पर 4.9 का समर्थन करता है।
  • CUDA 8 रिलीज़ के अनुसार, gcc 5.3 पूरी तरह से Ubuntu 16.06 और Fedora 23 पर समर्थित है।
  • CUDA 9 रिलीज़ के अनुसार, gcc 6 पूरी तरह से Ubuntu 16.04, Ubuntu 17.04 और Fedora 25 पर समर्थित है।
  • CUDA 9.2 रिलीज में gcc 7 के लिए समर्थन जोड़ा गया है
  • CUDA 10.1 रिलीज़ gcc 8 के लिए समर्थन जोड़ता है

वर्तमान में (CUDA 10.1 के रूप में) CUDA में कोई gcc 9 समर्थन नहीं है।

ध्यान दें कि हाल ही में NVIDIA ने एक बहुत ही उपयोगी तालिका जोड़ी है जिसमें वर्तमान CUDA रिलीज़ के लिए समर्थित संकलक और OS मैट्रिक्स शामिल है।


किसी भी विचार CUDA 7.5 के लिए क्या उपयोग किया जाता है?
ग्यूसॉफ्ट

2
मैं gcc 4.9.3बिना किसी समस्या के SLES 11 SP3 पर CUDA 7.5 का उपयोग करता हूं ।
पीटर वरगा

3
क्या? एक कोड को उच्च संस्करणों के साथ संकलन नहीं करना चाहिए (पाठ्यक्रम की हार्डकोडेड सीमाओं को छोड़कर) ? केवल एक चीज जो मैं सोच सकता हूं, वह यह है कि चूंकि कुछ संस्करण C11 / C ++ 11 डिफ़ॉल्ट रूप से सक्षम हैं, लेकिन यदि वह पुराने कोड के साथ कोई समस्या पैदा कर रहा है, तो कमांड लाइन स्विच के साथ आसान वर्कअराउंड हो सकता है।
हाय-एन्जिल

2
@ हाय-एंजेल को सुरक्षित करना। #talonmies "प्रतिबंध गैर-परक्राम्य है" यहां तक ​​कि क्या मतलब है? जीसीके और जीडीबी के नए संस्करण ऑब्जेक्ट फ़ाइलों के लिए पुराने बाइनरी हेडर का समर्थन करते हैं, क्योंकि उनके पास "हमेशा" (सॉर्ट) है, कोई कारण नहीं है कि नए जीसीसी संस्करणों को काम नहीं करना चाहिए। समाधानों को अलग-अलग करने से, किसी भी अन्य समस्या का सबसे अधिक संभावना है एसी प्रीप्रोसेसर वर्जन फ्लैग सेटिंग, और अगर कोई परिभाषित या मैक्रो के भाग के रूप में कुछ क्यूडा हेडर में gcc वर्जन टेस्ट "हार्डकोड" है, तो इसे ठीक करना काफी आसान है। अपवाद cuda gpu संकलक ही हो सकता है।
बाराकह

1
यह बाइनरी संगतता प्रश्न नहीं है। CUDA टूलचैन के लिए आवश्यक है कि nvcc और GPU फ्रंट एंड पार्सर विभिन्न कंपाइलर और libc / libc ++ आंतरिक हेडर को होस्ट और डिवाइस कोड दोनों को संकलित और अधिभारित कर सकते हैं और उन्हें एक साथ एकीकृत कर सकते हैं। CUDA पार्सर को अन्य चीजों के साथ सही तरीके से gcc आंतरिक हेडर को पार्स करने में सक्षम होना चाहिए। बिना शीर्षक वाले जीसीसी संस्करण और असफल हो सकते हैं, भले ही एनवायरनमेंट हेडर में निर्मित प्रीप्रोसेसर गार्ड के बावजूद। आप या तो मुझ पर विश्वास कर सकते हैं (लगभग 10 वर्षों से CUDA टूलचैन पर हैकिंग कर रहे हैं), या नहीं। इस बिंदु पर मैं वास्तव में नहीं हूँ
तालीमों

57
  1. अपने CUDA संस्करण के लिए अधिकतम समर्थित GCC संस्करण की जाँच करें:

     | CUDA version | max supported GCC version |
     |--------------|---------------------------|
     |      11      |             9             |
     |  10.1, 10.2  |             8             |
     |   9.2, 10.0  |             7             |
     |   9.0, 9.1   |             6             |
     |       8      |            5.3            |
     |       7      |            4.9            |
     |    5.5, 6    |            4.8            |
     |    4.2, 5    |            4.6            |
     |      4.1     |            4.5            |
     |      4.0     |            4.4            |
  2. उस GCC संस्करण के लिए एक env var सेट करें। उदाहरण के लिए, CUDA 10.2 के लिए:

     MAX_GCC_VERSION=8
  3. सुनिश्चित करें कि आपके पास वह संस्करण स्थापित है:

     sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION
  4. CUDA फ़ोल्डरों के भीतर सिम्लिंक जोड़ें:

     sudo ln -s /usr/bin/gcc-$MAX_GCC_VERSION /usr/local/cuda/bin/gcc 
     sudo ln -s /usr/bin/g++-$MAX_GCC_VERSION /usr/local/cuda/bin/g++

    (या /usr/local/cudaअपने CUDA स्थापना पथ के साथ स्थानापन्न करें, अगर यह वहां नहीं है)

CUDA-GCC संगतता तालिका के बारे में अधिक जानकारी के लिए इस GitHub को देखें


3
बच गई मेरी जान लोल विन्यास दुःस्वप्न !!!! धन्यवाद। मैंने इसे gcc और g ++ 7 सिस्टम लिंक के साथ cuda 10 में लागू किया। किसी के लिए भी जो इस पार आता है।
Thekevshow

मैं बनाना चाहिए /usr/bin/gccऔर /usr/bin/g++या /usr/local/cuda/bin/gccअपने आप फ़ोल्डरों?
जोश डेसमंड

@JoshDesmond आपके द्वारा बताई गई फ़ाइलों के लिए सिम्लिंक चरण 4 में बनाई गई है
bryant1410

@ bryant1410 जब मैंने चरण चार में कमांडों को चलाया, तो मुझे याद है कि, "त्रुटि: निर्देशिका / usr / स्थानीय / कोडा / बिन / gcc की तर्ज पर कोई त्रुटि नहीं है, मौजूद नहीं है, गर्भपात" या कुछ इसी तरह। मुझे अब एहसास हो रहा है, (प्रश्न के विवरण को पढ़ने के बाद), कि आपका उत्तर ओपी द्वारा उल्लेखित एक चरण 0 को मानता है: "मैंने क्यूडा टूलकिट स्थापित किया है, फिर अंत में एसडीके"। मैं एनवीआईडीआईए के cuda_10.2.89_440.33.01_linux.runविजार्ड के साथ इंस्टॉलेशन करने की कोशिश कर रहा था , जो केवल जीसीसी संगतता के बारे में शिकायत के साथ रनटाइम पर विफल रहा। मैंने 9: P
जोश डेसमंड

1
आप के साथ NVCC स्थापित किया है [एना | मिनी] conda (conda-फोर्ज पैकेज cudatoolkit-dev), तो आप की तरह अपने env अंदर लिंक करने की जरूरत है ln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gccऔरln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
डिएगो Ferri

25

मेरे डिस्ट्रो (उबंटू 11.10) पर Gearoid मर्फी का घोल मेरे लिए बेहतर काम करता है, gcc-4.4 और gcc-4.6 एक ही डायरेक्टरी में हैं, इसलिए --compiler-bindir कोई मदद नहीं है। एकमात्र चेतावनी यह है कि मुझे g ++ - 4.4 भी स्थापित करना है और साथ ही इसे सिमल करना है:

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/local/cuda/bin/g++

11

CUDA7.5 के लिए ये लाइनें काम करती हैं:

sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc 
sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++

9

इस समस्या को हल करने के लिए "अपडेट-विकल्प" का उपयोग करने का तरीका देखें :

... यदि आप gcc 4.6 स्थापित करते हैं, तो आप संस्करणों के बीच आसानी से स्विच करने की अनुमति देने के लिए अद्यतन-विकल्प कमांड का भी उपयोग कर सकते हैं। इसके साथ कॉन्फ़िगर किया जा सकता है:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --config gcc

6

अगर cmakeमेरे लिए फाइलों के संपादन और लिंकिंग के किसी भी हैक का उपयोग नहीं किया गया है तो मैंने उन झंडे का उपयोग करके संकलित किया है जो जीसीसी / ++ संस्करण को निर्दिष्ट करते हैं।
cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..

आकर्षण की तरह काम किया।


haha मैं दूसरे प्रश्न से आपके उत्तर को यहाँ जोड़ने का प्रयास करने जा रहा था क्योंकि मुझे लगा कि इसे इस सूत्र में पिरोने की आवश्यकता है। अच्छा काम फिर! धन्यवाद
MikeDoho

एक को SO पर डुप्लिकेट उत्तर पोस्ट करने से बचना चाहिए लेकिन मेरे पास कोई विकल्प नहीं था। :)
अंकनकर्ता

5

अधिकांश वितरणों पर आपके पास एक और gcc और g ++ संस्करण स्थापित करने की संभावना है, जो gcc-4.7 जैसे सबसे हालिया संकलक के पास है। इसके अलावा अधिकांश बिल्ड सिस्टम CCऔर CXXपर्यावरण चर के बारे में जानते हैं , जो आपको क्रमशः अन्य C और C ++ कंपाइलर निर्दिष्ट करते हैं। तो मैं कुछ सुझाव देता हूं:

CC=gcc-4.4 CXX=g++-4.4 cmake path/to/your/CMakeLists.txt

Makefiles के लिए एक समान तरीका होना चाहिए। जब तक आप नहीं जानते कि आप क्या कर रहे हैं, मैं / हमर / लोकल के भीतर कस्टम सिमिलिंक सेट करने की सलाह नहीं देता।


3

यह 23 फेडोरा के लिए काम करता है। कॉम्पिटिशन जीसीसी रिपॉजिटरी आपके फेडोरा के संस्करण के आधार पर थोड़ी अलग होगी।

यदि आप निम्नलिखित रिपॉजिटरी स्थापित करते हैं:

sudo yum install compat-gcc-34-c++-3.4.6-37.fc23.x86_64 compat-gcc-34-3.4.6-37.fc23.x86_64 

अब जैसा कि आपके cuda बिन फ़ोल्डर में है ऊपर माना मुलायम लिंक बनाते हैं /usr/local/cuda/

sudo ln -s /usr/bin/gcc-34 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-34 /usr/local/cuda/bin/g++

अब आपको nvccजीसीसी संस्करण त्रुटि के बिना संकलन करने में सक्षम होना चाहिए ।


2

Gearoid मर्फी का समाधान एक आकर्षण की तरह काम करता है। मेरे लिए मैं दो निर्देशिकाओं के लिए था -

/usr/local/cuda 
/usr/local/cuda-5.0

सॉफ्ट लिंक्स को केवल नीचे उल्लिखित डायरेक्टरी में जोड़ा जाना था -

/usr/local/cuda 

इसके अलावा, दोनों जी + और जीसीसी सॉफ्ट लिंक की आवश्यकता थी जैसा कि शिगचाग द्वारा उल्लेख किया गया था।


2

Gcc (gcc-4.4, उदाहरण के लिए) के एक विशिष्ट संस्करण का उपयोग करने के लिए nvcc को कॉन्फ़िगर करने का दूसरा तरीका, nvcc.profile को संपादित करना और पथ को बदलने के लिए पथ को शामिल करना है जिसे आप पहले उपयोग करना चाहते हैं।

उदाहरण के लिए (gcc-4.4.6 in / opt):

PATH += /opt/gcc-4.4.6/lib/gcc/x86_64-unknown-linux-gnu/4.4.6:/opt/gcc-4.4.6/bin:$(TOP)/open64/bin:$(TOP)/share/cuda/nvvm:$(_HERE_):

Nvcc.profile का स्थान बदलता रहता है, लेकिन यह उसी निर्देशिका में होना चाहिए जो nvcc निष्पादन योग्य हो।

यह हैक का एक सा है, के रूप में nvcc.profile nvcc मैनुअल के अनुसार उपयोगकर्ता कॉन्फ़िगरेशन के लिए अभिप्रेत नहीं है, लेकिन यह समाधान था जो मेरे लिए सबसे अच्छा काम करता था।


मैं ऐसा करने का सुझाव देता हूं, लेकिन जी ++ के साथ एक निर्देशिका के पथ को इंगित करते हुए सही gcc संस्करण (विशेष रूप से उपयोगी है यदि आपका वितरण समर्थित gcc संस्करण प्रदान करता है) से सहानुभूति रखता है। उदाहरण के लिए:mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
सामी


2

मेरे जैसे लोगों के लिए जो प्रयोग करते समय भ्रमित हो जाते हैं cmake, FindCUDA.cmakeस्क्रिप्ट कुछ सामान को ओवरराइड करती है nvcc.profile। आप http://public.kitware.com/Bug/view.php?id=13674 के अनुसार nvccसेटिंग करके होस्ट कंपाइलर को निर्दिष्ट कर सकते हैं ।CUDA_HOST_COMPILER


cmake .. -DCMAKE_INSTALL_PREFIX=/InstallPos_GPU/ -DCMAKE_C_COMPILER="/gcc-8.3.0/bin/gcc" -DCMAKE_CXX_COMPILER="/gcc-8.3.0/bin/g++" -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/cuda-7.5/ -D NVCCFLAGS=" -ccbin /cuda-7.5/bin/" -DCUDA_HOST_COMPILER=/cuda-7.5/bin/gccमैंने सफलतापूर्वक GPU समर्थन के साथ gromacs स्थापित किया है।
पेंगची

2

मुझे gcc, g ++ के पुराने संस्करणों को स्थापित करना था।

    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4

जाँच करें कि gcc-4.4 / usr / bin / में है, और g ++ के लिए भी यही है फिर मैं ऊपर दिए गए समाधान का उपयोग कर सकता हूं:

    sudo ln -s /usr/bin/gcc-4.4 /opt/cuda/bin/gcc
    sudo ln -s /usr/bin/g++-4.4 /opt/cuda/bin/g++

जब मैं इस कमांड को आज़माता हूं, तो यह "फ़ाइल मौजूद है" कहता है और लिंक को निष्पादित नहीं करता है। कोई मदद ?
Sentient07

मुझे डर है कि मैं इस बारे में सोचने से दूर हूं कि मुझे क्या कहना है। उम्मीद है कि दूसरों की मदद कर सकते हैं।
travelingbones

2

में $CUDA_HOME/include/host_config.h, इस तरह के लाइनों को खोजने (विभिन्न CUDA संस्करण के बीच थोड़ा भिन्न हो सकते):

//...
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9)

#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

#endif [> __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9) <]
//...

अपनी स्थिति से मेल खाते हुए उन्हें निकालें या बदलें।

ध्यान दें कि यह विधि संभावित रूप से असुरक्षित है और आपके निर्माण को तोड़ सकती है। उदाहरण के लिए, gcc 5 डिफ़ॉल्ट रूप में C ++ 11 का उपयोग करता है, हालांकि यह CUDA 7.5 के रूप में nvcc के मामले में नहीं है। जोड़ने के लिए एक वर्कअराउंड है

--Xcompiler="--std=c++98" CUDA <= 6.5 के लिए

या

--std=c++11 CUDA के लिए = = 7.0।


हम --std=c++विकल्प को कहां जोड़ते हैं ?
asgs

1

यदि आप इस त्रुटि का सामना करते हैं, तो कृपया लॉग फाइल पढ़ें:

$ cat /var/log/cuda-installer.log 
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc

[INFO]: gcc version: gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2) 

[ERROR]: unsupported compiler version: 9.2.1. Use --override to override this check.

बस लॉग फ़ाइल में सुझाव का पालन करें:

sudo sh cuda_<version>_linux.run --override

काम हो गया :)

मैंने अभी --overrideविकल्प का उपयोग करके कुबंटु 19.10 पर gcc 9.2 के साथ CUDA 10.2 स्थापित किया ।


0

Ubuntu 16.10 पर CUDA 8.0 के उदाहरण संकलित करने के लिए, मैंने किया:

sudo apt-get install gcc-5 g++-5
cd /path/to/NVIDIA_CUDA-8.0_Samples
# Find the path to the library (this should be in NVIDIA's Makefiles)
LIBLOC=`find /usr/lib -name "libnvcuvid.so.*" | head -n1 | perl -pe 's[/usr/lib/(nvidia-\d+)/.*][$1]'`
# Substitute that path into the makefiles for the hard-coded, incorrect one
find . -name "*.mk" | xargs perl -pi -e "s/nvidia-\d+/$LIBLOC/g"
# Make using the supported compiler
HOST_COMPILER=g++-5 make

इससे पूरे सिस्टम को संशोधित नहीं करने या सिर्फ बायनेरिज़ (जो लाइब्रेरी को जोड़ने वाली समस्याओं का कारण बन सकता है) के लिए सहानुभूति नहीं बनाने का लाभ है।


0

इससे मेरी समस्या हल हो गई:

sudo rm /usr/local/cuda/bin/gcc
sudo rm /usr/local/cuda/bin/g++
sudo apt install gcc-4.4 g++-4.4
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/local/cuda/bin/g++

0

CUDA 6.5 (और जाहिरा तौर पर 7.0 और 7.5) के लिए, मैंने gcc 4.8.5 RPM पैकेज (Fedora Core 30 के तहत) का एक संस्करण बनाया है, जो आपके सिस्टम के वर्तमान GCC के साथ gcc के उस संस्करण को स्थापित करने की अनुमति देता है।

आप उस जानकारी को यहाँ पा सकते हैं ।


0

मेरे मामले में, मैंने CUDA को पहले ही उबंटू संस्करण से स्थापित कर दिया था और सेमीकेड यह पता लगाएगा कि एनवीडिया एसडीके प्रबंधक का उपयोग करके नए स्थापित संस्करण के बजाय एक।

मैं भागा dpkg -l | grep cudaऔर दोनों संस्करण देख सकता था।

मुझे जो करना था वह पुराने CUDA (मेरे मामले में संस्करण 9.1) की स्थापना रद्द कर दी गई है और नए संस्करण को अकेला छोड़ दें (संस्करण 10.2)। मैंने purge कमांड का उपयोग इस तरह किया:

sudo apt-get purge libcudart9.1 nvidia-cuda-dev nvidia-cuda-doc \
                                nvidia-cuda-gdb nvidia-cuda-toolkit

कृपया पुष्टि करें कि पैकेज नाम उस संस्करण से मेल खाता है जिसे आप अपनी स्थापना से हटाना चाहते हैं।

मुझे एसडीके संस्करण में सभी पुस्तकालयों और पुस्तकालयों को पुनर्निर्देशित करने के लिए cmakeएक खाली BUILDनिर्देशिका से पुन: प्राप्त करना था #include(क्योंकि पुराने पथ मौजूदा बिल्ड वातावरण में बेक किए गए थे)।


-1

ऐसा इसलिए हो रहा है क्योंकि आपका वर्तमान CUDA संस्करण आपके वर्तमान GCC संस्करण का समर्थन नहीं करता है। आपको निम्नलिखित करने की आवश्यकता है:

  1. समर्थित GCC संस्करण खोजें (CUDA 9 के लिए मेरे मामले में 5)

    • सीयूडीए 4.1: जीसीसी 4.5
    • क्यूडा 5.0: जीसीसी 4.6
    • क्यूडा 6.0: जीसीसी 4.7
    • सीयूडीए 7.0: जीसीसी 4.8
    • सीयूडीए 7.5: जीसीसी 4.8
    • सीयूडीए 8: जीसीसी 5.3
    • सीयूडीए 9: जीसीसी 5.5
    • CUDA 9.2: जीसीसी 7
    • सीयूडीए 10.1: जीसीसी 8
  2. समर्थित GCC संस्करण स्थापित करें

    sudo apt-get install gcc-5
    sudo apt-get install g++-5
  3. /usr/binनिर्देशिका में GCC के लिए सॉफ्टलिंक बदलें

    cd /usr/bin
    sudo rm gcc
    sudo rm g++
    sudo ln -s /usr/bin/gcc-5 gcc
    sudo ln -s /usr/bin/g++-5 g++
  4. /usr/local/cuda-9.0/binनिर्देशिका में GCC के लिए सॉफ्टलिंक बदलें

    cd /usr/local/cuda-9.0/bin
    sudo rm gcc
    sudo rm g++
    sudo ln -s /usr/bin/gcc-5 gcc
    sudo ln -s /usr/bin/g++-5 g++
  5. -DCUDA_HOST_COMPILER=/usr/bin/gcc-5अपनी setup.pyफ़ाइल में जोड़ें , संकलन के लिए उपयोग किया जाता है

    if torch.cuda.is_available() and CUDA_HOME is not None:
        extension = CUDAExtension
        sources += source_cuda
        define_macros += [("WITH_CUDA", None)]
        extra_compile_args["nvcc"] = [
            "-DCUDA_HAS_FP16=1",
            "-D__CUDA_NO_HALF_OPERATORS__",
            "-D__CUDA_NO_HALF_CONVERSIONS__",
            "-D__CUDA_NO_HALF2_OPERATORS__",
            "-DCUDA_HOST_COMPILER=/usr/bin/gcc-5"
        ]
  6. पुरानी बिल्ड निर्देशिका निकालें

    rm -rd build/
  7. फिर से संकलित करके संकलित करें CUDAHOSTCXX=/usr/bin/gcc-5

    CUDAHOSTCXX=/usr/bin/gcc-5 python setup.py build develop

नोट: यदि आपको gcc: error trying to exec 'cc1plus': execvp: no such file or directoryइन चरणों का पालन करने के बाद भी त्रुटि मिलती है , तो इस तरह GCC को फिर से स्थापित करने का प्रयास करें और फिर से संकलन करें:

sudo apt-get install --reinstall gcc-5
sudo apt-get install --reinstall g++-5

क्रेडिट: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.