সিডুএ আমার জিসিসি সংস্করণের সাথে বেমানান


104

চুদা এসডিকে প্রেরিত কয়েকটি উদাহরণ সংকলন করতে আমার সমস্যা হচ্ছে। আমি বিকাশকারী ড্রাইভার (সংস্করণ 270.41.19) এবং সিইউডিএ টুলকিট ইনস্টল করেছি, তারপরে অবশেষে এসডিকে (উভয়ই 4.0.07 সংস্করণ)।

প্রথমদিকে এটি মোটেও সংকলন করেনি:

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- র সর্বশেষ সংস্করণটি ব্যবহার করছেন (যদি না আপনি একেবারে প্রথমটি ব্যবহার না করেন)। এনভিআইডিএ প্রায় প্রতিটি প্রকাশের সাথে সর্বাধিক সমর্থিত সংকলক সংস্করণ আপ করে।
einpoklum 3'15

এই CUDA 10 যাদের জন্য সহায়ক হতে হবে এবং পারে ত্রুটির অত্যন্ত উচ্চ GNU কম্পাইলার শৃঙ্খল সংস্করণ পেয়ে: stackoverflow.com/questions/53344283/...
ডগলাস Daseeco

উত্তর:


118

ইতিমধ্যে চিহ্নিত হিসাবে, এনভিসিসি জিসিসি 4.4 এর উপর নির্ভর করে। এনভিসিসি ইনস্টল দিয়ে নির্মিত বিন ডিরেক্টরিটিতে সফটলিঙ্ক যুক্ত করে কোনও সংকলক পরামিতি ছাড়াই জিসিসি-র সঠিক সংস্করণটি ব্যবহার করার জন্য এনভিসিসি কনফিগার করা সম্ভব।

ডিফল্ট চুদা বাইনারি ডিরেক্টরি (ইনস্টলেশন ডিফল্ট) হ'ল / ইউএসআর / স্থানীয় / চুদা / বিন, এই ডিরেক্টরি থেকে জিসিসি-র সঠিক সংস্করণে একটি সফটলিঙ্ক যুক্ত করা যথেষ্ট:

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


4
"আপডেট-বিকল্পগুলি" কমান্ড এছাড়াও সহায়তা করতে পারে, বিশেষত CUDA 5.0 ইনস্টল করার সময়
ফোড

4
আমিও জি ++ এর সঠিক সংস্করণে একটি প্রতীকী লিঙ্ক যুক্ত করতে হয়েছিল।
অরোন

17
আমারও জি ++ এর সাথে লিঙ্ক করতে হয়েছিল। অন্যথায়, সহজ 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++
ব্যবহারকারী 2023370

8
আপনি সংকলন চেষ্টা করেcmake .. && make দেখতে পারেন । আপনি যদি প্লেইন ব্যবহার করেন তবে চেষ্টা করতে পারেন । cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && makeMakefile make CXX=g++-4.4 CC=gcc-4.4
patryk.beza

4
আমি যখন এই আদেশটি চেষ্টা করি তখন এটি "ফাইল বিদ্যমান" বলে এবং লিঙ্কটি সম্পাদন করে না। কোন সাহায্য ?
সেনটেন্ট07

59

জিসিসি 4.5.৪ এবং ৪.6 সিউডিএর সাহায্যে সমর্থিত নয় - কোডটি সংকলন করবে না এবং চুদা-জিডিবি সহ বাকী টুলচেন সঠিকভাবে কাজ করবে না। আপনি সেগুলি ব্যবহার করতে পারবেন না এবং সীমাবদ্ধতাটি আলোচনা সাপেক্ষে নয়।

আপনার একমাত্র সমাধানটি হ'ল দ্বিতীয় সংকলক হিসাবে একটি সিসিটি 4.4 সংস্করণ ইনস্টল করা (বেশিরভাগ বিতরণ এটির অনুমতি দেবে)। এনভিসিসি-তে একটি বিকল্প রয়েছে --compiler-bindirযা বিকল্প সংকলককে নির্দেশ করতে ব্যবহার করা যেতে পারে। একটি স্থানীয় ডিরেক্টরি তৈরি করুন এবং তারপরে সমর্থিত জিসিসি সংস্করণ এক্সিকিউটেবলের সাথে প্রতীকী লিঙ্কগুলি তৈরি করুন। বিকল্পের মাধ্যমে সেই স্থানীয় ডিরেক্টরিটিকে এনভিসিসি-তে পাস করুন --compiler-bindirএবং আপনার বাকী সিস্টেমটিকে প্রভাবিত না করেই আপনি CUDA কোডটি সংকলন করতে সক্ষম হবেন।


সম্পাদনা :

নোট করুন যে এই প্রশ্নটি এবং উত্তরটি CUDA 4 এর সাথে সম্পর্কিত।

যেহেতু এটি লেখা হয়েছিল, এনভিআইডিএ নতুন সিউডিএ সরঞ্জামচেন রিলিজের পরবর্তী জিসিসি সংস্করণগুলির জন্য সমর্থন বাড়িয়েছে

  • 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 এখন সমর্থিত।
  • সিইউডিএ 7.0 রিলিজ হিসাবে, উবুন্টু 14.04 এবং ফেডোরা 21-তে 4.9 সমর্থন সহ, জিসিসি 4.8 সম্পূর্ণরূপে সমর্থিত।
  • সিইউডিএ 7.5 রিলিজ অনুসারে, উবুন্টু 14.04 এবং ফেডোরা 21-তে 4.9 সমর্থন সহ, জিসিসি 4.8 সম্পূর্ণরূপে সমর্থিত।
  • সিইউডিএ 8 রিলিজ অনুসারে, উবুন্টু 16.06 এবং ফেডোরা 23-তে জিসিসি 5.3 সম্পূর্ণরূপে সমর্থিত।
  • সিইউডিএ 9 রিলিজ অনুসারে, জিসিসি 6 সম্পূর্ণরূপে উবুন্টু 16.04, উবুন্টু 17.04 এবং ফেডোরা 25 তে সমর্থিত।
  • সিইউডিএ 9.2 রিলিজ জিসিসি 7 এর জন্য সমর্থন যোগ করে
  • সিইউডিএ 10.1 রিলিজ জিসিসি 8 এর জন্য সমর্থন যোগ করে

CUDA তে বর্তমানে (CUDA 10.1 হিসাবে) কোনও জিসিসি 9 সমর্থন নেই।

লক্ষ্য করুন এনভিডিয়া সম্প্রতি একটি খুব দরকারী টেবিল যোগ করেনি এখানে যা বর্তমান CUDA মুক্তির জন্য সমর্থিত কম্পাইলার এবং OS ম্যাট্রিক্স রয়েছে।


কোন ধারণা কি চুদা 7.5 এর জন্য ব্যবহৃত হয়?
গাইসফট

4
আমি gcc 4.9.3কোনও সমস্যা ছাড়াই এসইএলইএস 11 এসপি 3 দিয়ে চুদা 7.5 ব্যবহার করি ।
পিটার VARGA

4
কি? কীভাবে একটি কোড উচ্চতর সংস্করণ (অবশ্যই হার্ডকোডযুক্ত সীমাবদ্ধতা ব্যতীত) সংকলন না করার কথা ? আমি কেবলমাত্র এটিই ভাবতে পারি যে C11 / C ++ 11 এর কিছু সংস্করণ ডিফল্টরূপে সক্ষম হয়েছে, তবে এটি যদি কোনও পুরানো কোড নিয়ে সমস্যা তৈরি করে, তবে এটি একটি কমান্ড লাইন স্যুইচটির সাহায্যে সহজ হতে পারে।
হাই-এঞ্জেল

4
সেকেন্ডিং @ হাই-অ্যাঞ্জেল। # টালোনমিজ "সীমাবদ্ধতা অ-আলোচনাযোগ্য" এর অর্থ কী? Gcc এবং gdb এর নতুন সংস্করণগুলি অবজেক্ট ফাইলগুলির জন্য পুরানো বাইনারি শিরোলেখগুলিকে সমর্থন করে, যেমন তাদের "সর্বদা" (সাজানো) থাকে, নতুন জিসিসি সংস্করণগুলি কাজ না করার কোনও কারণ নেই। সিম্যলিংকিং সলিউশনগুলি একপাশে রেখে অন্য যে কোনও সমস্যা সম্ভবত এসি প্রিপ্রসেসর সংস্করণ ফ্ল্যাগ সেটিং এবং যদি কোনও জিডি সিকিউর হেডারে একটি সংজ্ঞায়িত বা ম্যাক্রোর অংশ হিসাবে জিসিসি সংস্করণ পরীক্ষা "হার্ডকডড" হয় তবে এটি ঠিক করা যথেষ্ট সহজ। ব্যতিক্রমটি নিজেই চুদা জিপিইউ সংকলক হতে পারে।
বেরাকাহ

4
এটি বাইনারি সামঞ্জস্যের প্রশ্ন নয়। সিইউডিএ সরঞ্জামচেনের জন্য এনভিসিসি এবং জিপিইউ ফ্রন্ট এন্ড পার্সার হোস্ট এবং ডিভাইস কোড উভয়ই সংকলন করতে এবং বিভিন্ন সংকলক এবং libc / libc ++ অভ্যন্তরীণ শিরোনামকে বাধা দিতে এবং ওভারলোড করতে পারে এবং তাদের একত্রে সংহত করতে পারে। সিডুএ পার্সারকে অন্যান্য জিনিসের মধ্যেও, জিসিসি অভ্যন্তরীণ শিরোনামগুলি সঠিকভাবে পার্স করতে সক্ষম হতে হবে। এনভিআইডিআইএ শিরোলেখগুলিতে নির্ধারিত প্রিপ্রোসেসর গার্ড নির্বিশেষে অনির্ধারিত জিসিসি সংস্করণগুলি এবং ব্যর্থ হতে পারে। আপনি হয় আমাকে বিশ্বাস করতে পারেন (যিনি প্রায় 10 বছর ধরে চুদা টুলচেইনে হ্যাক করছেন) বা না or এই মুহুর্তে আমি আসলেই করি না
টালমোনিস

58
  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. সেই জিসিসি সংস্করণটির জন্য একটি এনভিভ ভার সেট করুন। উদাহরণস্বরূপ, CUDA 10.2 এর জন্য:

     MAX_GCC_VERSION=8
    
  3. আপনি যে সংস্করণটি ইনস্টল করেছেন তা নিশ্চিত করুন:

     sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION
    
  4. সিইউডিএ ফোল্ডারগুলির মধ্যে চিহ্ন যুক্ত করুন:

     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 ইনস্টলেশন পাথের বিকল্প যদি এটি না থাকে)

চুদা-জিসিসি সামঞ্জস্যতা টেবিলের আরও তথ্যের জন্য এই গিটহাবের সংক্ষেপটি দেখুন


4
আমার জীবন বাঁচাও লোল কনফিগারেশন দুঃস্বপ্ন !!!! ধন্যবাদ. আমি এটি জিসিসি এবং জি ++ 7 সিস্টেমের লিঙ্ক সহ চুদা 10 তে প্রয়োগ করেছি। যে কেউ এই জন্য আসে।
থেক্যাভশো

আমার তৈরি করা উচিত /usr/bin/gccএবং /usr/bin/g++বা /usr/local/cuda/bin/gccনিজেকে ফোল্ডার?
জোশ ডেসমন্ড

@ জোশডেসমন্ড আপনি উল্লিখিত ফাইলগুলির জন্য
সিলেমিংকটি

@ ব্রায়ান্ট ১৪১০ যখন আমি চার ধাপে কমান্ডগুলি চালিত করেছি, তখন মনে আছে, "ত্রুটি: ডিরেক্টরি / usr / স্থানীয় / চুদা / বিন / জিসিসি উপস্থিত নেই, পরিত্যাগ করা হচ্ছে" বা এই জাতীয় কিছু। আমি এখন উপলব্ধি করছি, (প্রশ্নের বিবরণ পড়ার পরে), আপনার উত্তরটি ওপির দ্বারা উল্লিখিত একটি পদক্ষেপ 0 ধরে নিয়েছে: "আমি সিডুএ টুলকিট ইনস্টল করেছি, শেষ পর্যন্ত এসডিকে"। আমি cuda_10.2.89_440.33.01_linux.runএনভিআইডিআইএর উইজার্ড জিনিসযুক্ত সাথে ইনস্টলেশনটি করার চেষ্টা করছিলাম , যা জিসিসি সামঞ্জস্যতা সম্পর্কে অভিযোগ নিয়ে রানটাইমে কেবল ব্যর্থ হয়েছিল। আমি স্রেফ জি সি সি 9 আনইনস্টল করার সিদ্ধান্ত নিয়ে শেষ করেছি: পি
জোশ ডেসমন্ড

4
যদি আপনি [আনা | মিনি] কনডা (কনডা-ফোর্স প্যাকেজ cudatoolkit-dev) এর সাথে এনভিসিসি ইনস্টল করেন তবে আপনাকে আপনার এনভির মতো লিংক যুক্ত করতে হবে 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++
ডিয়েগো ফেরি

25

গিয়ারয়েড মারফি এর সমাধান আমার জন্য আরও ভাল কাজ করে যেহেতু আমার ডিস্ট্রোতে (উবুন্টু ১১.১০), জিসিসি-৪.৪ এবং জিসিসি-৪.6 একই ডিরেক্টরিতে রয়েছে, সুতরাং - কম্পাইলার-বিন্দির কোনও সাহায্য নেই। কেবলমাত্র ক্যাভিয়েটটি হ'ল আমাকেও জি ++ - ৪.৪ ইনস্টল করতে হয়েছিল এবং এটিকে সিমলিংকও করতে হয়েছিল:

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

এই সমস্যাটি সম্পর্কে জানতে "আপডেট-বিকল্পগুলি" কীভাবে ব্যবহার করবেন তা পরীক্ষা করে দেখুন :

... আপনি যদি জিসিসি 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

7

যদি cmakeআমার জন্য ফাইলগুলি সম্পাদনা এবং লিঙ্কিংয়ের হ্যাকগুলির কোনওটিই কাজ করে না তাই আমি জিসিসি / জি ++ সংস্করণ উল্লেখ করে এমন পতাকাগুলি ব্যবহার করে সংকলন করেছি।
cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..

মোহন মত কাজ।


হাহা আমি আপনার উত্তরটি এখানে অন্য প্রশ্ন থেকে লিঙ্ক করার চেষ্টা করতে যাচ্ছি কারণ আমি ভেবেছিলাম এটি এই থ্রেডে রাখা দরকার। আবারও ভাল কাজ! ধন্যবাদ
মাইকডোহো

কাউকে এসও-তে সদৃশ উত্তর পোস্ট করা থেকে বিরত থাকা উচিত তবে আমার কোনও বিকল্প ছিল না। :)
মার্কোরক্সর

5

বেশিরভাগ ডিস্ট্রিবিউশনে আপনার সর্বাধিক সাম্প্রতিক সংকলক যেমন জিসিসি-৪. beside এর পাশে অন্য একটি জিসিসি এবং জি ++ সংস্করণ ইনস্টল করার সম্ভাবনা রয়েছে। এছাড়াও বেশিরভাগ বিল্ড সিস্টেমগুলি পরিবেশ CCএবং CXXভেরিয়েবল সম্পর্কে সচেতন , যা আপনাকে যথাক্রমে অন্যান্য সি এবং সি ++ সংকলক নির্দিষ্ট করতে দেয়। সুতরাং আমি এরকম কিছু প্রস্তাব দিই:

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

মেকফাইলগুলির জন্যও একইভাবে হওয়া উচিত। আপনি কী করছেন তা আপনি যদি না জানেন তবে আমি / usr / স্থানীয় মধ্যে কাস্টম সিমলিংক স্থাপনের প্রস্তাব দিই না।


3

এটি ফেডোরার ২৩ এর জন্য কাজ করে। আপনার ফেডোরার সংস্করণের ভিত্তিতে কমপ্যাট জিসিসি সংগ্রহস্থলগুলি কিছুটা আলাদা হবে slightly

আপনি যদি নিম্নলিখিত সংগ্রহস্থলগুলি ইনস্টল করেন:

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

আপনার চুদা বিন ফোল্ডারটি ধরে আছে ধরে ধরে উপরে বর্ণিত নরম লিঙ্কগুলি তৈরি করুন /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

গিয়ারয়েড মারফির দ্রবণটি কবজির মতো কাজ করে। আমার জন্য আমার চুদা জন্য দুটি ডিরেক্টরি ছিল -

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

সফট লিঙ্কগুলি কেবল নীচে উল্লিখিত ডিরেক্টরিতে যুক্ত করতে হয়েছিল -

/usr/local/cuda 

এছাড়াও, জিৎ ++ এবং জিসিসি উভয় নরম লিঙ্কগুলি শিগশ্যাচের উল্লেখ অনুসারে প্রয়োজনীয় ছিল।


2

জিসিসি-র নির্দিষ্ট সংস্করণ ব্যবহারের জন্য এনভিসিসি কনফিগার করার আরেকটি উপায় (উদাহরণস্বরূপ, জিসিসি-৪.৪ ,) এনভিসিসি.প্রফাইল সম্পাদনা এবং PATH পরিবর্তন করা ব্যবহার করতে চান তার জন্য পাথ অন্তর্ভুক্ত করার জন্য ।

উদাহরণস্বরূপ (gcc-4.4.6 ইন / অপ্ট ইন ইনস্টলড):

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_):

এনভিসিসি.প্রোফাইলের অবস্থানের পরিমাণটি পরিবর্তিত হয় তবে এটি এনভিসিসি-র মতো একই ডিরেক্টরিতে হওয়া উচিত এক্সিকিউটেবলের ।

এটি কিছুটা হ্যাক, কারণ এনভিসিসি.প্রফিলটি এনভিসিসি ম্যানুয়াল অনুসারে ব্যবহারকারীর কনফিগারেশনের উদ্দেশ্যে নয়, তবে এটিই ছিল সমাধান যা আমার পক্ষে সবচেয়ে ভাল কাজ করেছে।


আমি এটি করার পরামর্শ দিচ্ছি, তবে g ++ সহ কোনও ডিরেক্টরিতে পাথটি সঠিক জিসিসি সংস্করণে সিমলিং করা হয়েছে (বিশেষত কার্যকর যদি আপনার বিতরণটি কোনও সমর্থিত জিসিসি সংস্করণ সরবরাহ করে)। উদাহরণস্বরূপ: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আমি জিপিইউ সমর্থন সহ গ্র্যাম্যাকগুলি সফলভাবে ইনস্টল করেছি।
কলঙ্কিত

2

আমাকে জিসিসি, জি ++ এর পুরানো সংস্করণগুলি ইনস্টল করতে হয়েছিল।

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

পরীক্ষা করুন যে জিসিসি-৪.৪ / ইউএসআর / বিন / এ রয়েছে এবং জি ++ এর জন্য একই, তারপরে আমি উপরের সমাধানটি ব্যবহার করতে পারি:

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

আমি যখন এই আদেশটি চেষ্টা করি তখন এটি "ফাইল বিদ্যমান" বলে এবং লিঙ্কটি সম্পাদন করে না। কোন সাহায্য ?
সেনটেন্ট 07

আমি ভয় করি যে আমি কী বলব তা জানতে এই বিষয়টি চিন্তাভাবনা থেকে খুব দূরে সরিয়েছি। আশা করি অন্যরাও সহায়তা করতে পারে।
travelingbones

2

ইন $CUDA_HOME/include/host_config.h, এর মতো লাইনগুলি সন্ধান করুন (বিভিন্ন সিউডিএ সংস্করণের মধ্যে কিছুটা আলাদা হতে পারে):

//...
#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 ডিফল্ট হিসাবে সি ++ 11 ব্যবহার করে, তবে সিভিডিএ 7.5 হিসাবে এনভিসিসি-র ক্ষেত্রে এটি হয় না। একটি workaround যোগ করা হয়

--Xcompiler="--std=c++98" CUDA এর জন্য <= 6.5

বা

--std=c++11 CUDA> = 7.0 এর জন্য।


আমরা --std=c++বিকল্পটি কোথায় যুক্ত করব ?
21

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

কাজ শেষ :)

আমি সবেমাত্র কুডুন্টু 19.10 --overrideবিকল্পটি ব্যবহার করে জিসিসি 9.2 সহ চুদা 10.2 ইনস্টল করেছি ।


0

উবুন্টু 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

এটি পুরো সিস্টেমটি পরিবর্তন না করে কেবল বাইনারিগুলিতে সিমলিংক তৈরি না করার সুবিধা রয়েছে (যা গ্রন্থাগারের সাথে সংযোগ স্থাপন করতে পারে cause)


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 প্যাকেজটির একটি সংস্করণ তৈরি করেছি (ফেডোরা কোর 30 এর অধীনে) যা আপনার সিস্টেমের বর্তমান জিসিসির পাশাপাশি gcc সংস্করণ ইনস্টল করতে দেয়।

আপনি এখানে সমস্ত তথ্য খুঁজে পেতে পারেন ।


0

আমার ক্ষেত্রে, আমি উবুন্টু সংস্করণ থেকে সিউডিএ ইতিমধ্যে ইনস্টল করেছি এবং এনভিডিয়া এসডিকে ম্যানেজার ব্যবহার করে নতুন ইনস্টল করা সংস্করণের পরিবর্তে সিএমএকে এটি সনাক্ত করতে পারে।

আমি দৌড়ে গেলাম dpkg -l | grep cuda উভয় সংস্করণ দেখতে পেলাম।

আমার যা করতে হবে তা হ'ল পুরাতন সিউডিএ আনইনস্টল করুন (আমার ক্ষেত্রে 9.1 সংস্করণ) এবং নতুন সংস্করণটি একা রেখে যান (সংস্করণ 10.2)। আমি শুদ্ধ আদেশটি এর মতো ব্যবহার করেছি:

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

দয়া করে যাচাই করুন যে প্যাকেজের নামগুলি আপনার ইনস্টলেশন থেকে অপসারণ করতে চান এমন সংস্করণটির সাথে মেলে।

এসডিকে সংস্করণে সমস্ত এবং লাইব্রেরিগুলিকে পুনর্নির্দেশ করতে আমাকে cmakeএকটি ফাঁকা BUILDডিরেক্টরি থেকে পুনরায় চালিত #includeকরতে হয়েছিল (যেহেতু বিদ্যমান বিল্ড পরিবেশে পুরানো পাথগুলি বেকড ছিল)।


-1

এটি ঘটছে কারণ আপনার বর্তমান সিউডিএ সংস্করণ আপনার বর্তমান জিসিসি সংস্করণ সমর্থন করে না। আপনাকে নিম্নলিখিতগুলি করতে হবে:

  1. সমর্থিত জিসিসি সংস্করণটি খুঁজুন (সিউডিএ 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
    • চুদা 9.2: জিসিসি 7
    • চুদা 10.1: জিসিসি 8
  2. সমর্থিত জিসিসি সংস্করণ ইনস্টল করুন

    sudo apt-get install gcc-5
    sudo apt-get install g++-5
    
  3. /usr/binডিরেক্টরিতে জিসিসির সফটলিঙ্কগুলি পরিবর্তন করুন

    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ডিরেক্টরিতে জিসিসির সফটলিঙ্কগুলি পরিবর্তন করুন

    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এই পদক্ষেপগুলি অনুসরণ করার পরেও যদি আপনি ত্রুটিটি পান তবে জিসিসিকে পুনরায় ইনস্টল করার চেষ্টা করুন এবং তারপরে আবার সংকলন করুন:

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

ক্রেডিট: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.