क्या किसी ने सफलतापूर्वक Ubuntu 14.04.3 LTS x86_64 पर CUDA 7.5 स्थापित किया है?


12

मेरे वर्कस्टेशन में दो जीपीयू (क्वाड्रो K5200 और क्वाड्रो K2200) हैं, जिसमें नवीनतम NVIDIA ड्राइवर स्थापित है (संस्करण: 352.41)। फ़ाइल cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.debको CUDA 7.5 डाउनलोड से डाउनलोड करने के बाद , मैं इसे स्थापित करने का प्रयास करता हूं, लेकिन यह नीचे दिए गए परिणाम को बताता है:

root@P700-Bruce:/home/bruce/Downloads# sudo apt-get install cuda
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 cuda : Depends: cuda-7-5 (= 7.5-18) but it is not going to be installed
 unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                        Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

मैंने समाधान की कोशिश की है:

  1. sudo apt-get remove nvidia-cuda-* # पुराने nvidia-cuda पैकेज को हटा दें
  2. स्थापित करें unmet निर्भरताएँ:

    root@P700-Bruce:/home/bruce/Downloads# apt-get install cuda-7-5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     cuda-7-5 : Depends: cuda-toolkit-7-5 (= 7.5-18) but it is not going to be installed
                Depends: cuda-runtime-7-5 (= 7.5-18) but it is not going to be installed
     unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                            Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
    E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
    
    root@P700-Bruce:/home/bruce/Downloads# apt-get install cuda-toolkit-7-5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     cuda-toolkit-7-5 : Depends: cuda-core-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-command-line-tools-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-samples-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-documentation-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-visual-tools-7-5 (= 7.5-18) but it is not going to be installed
     unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                            Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
    E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
    
  3. एप्टीट्यूड को स्थापित और उपयोग करें

मेरे Ubuntu14.04 OS को अभी स्थापित किया गया है और इसने सॉफ्टवेयर अपडेट बनाया है और नवीनतम एनवीडिया ड्राइवर स्थापित किया है।

क्या आप कुछ मदद दे सकते हैं? अग्रिम में धन्यवाद!

जवाबों:


8

CUDA की स्थापना थोड़ी मुश्किल है। मैंने निम्नलिखित चरणों का पालन किया है और यह मेरे लिए काम करता है। आप इस लिंक का भी उल्लेख कर सकते हैं ।

पर्यावरण की पुष्टि:

  1. lspci | grep -i nvidia (पुष्टि करें कि NVIDIA के बोर्ड की जानकारी प्रदर्शित की गई है)

  2. uname -m (यह सुनिश्चित करें कि यह एक x86_64 है)

  3. gcc --version (सुनिश्चित करें कि यह स्थापित है)

CUDA की स्थापना -

  1. Https://developer.nvidia.com/cuda-downloadscuda_7.5.18_linux.run से फ़ाइल डाउनलोड करें

  2. निम्न आदेश चलाएँ:

    sudo apt-get install build-essential
    echo blacklist nouveau option nouveau modeset=0 |sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf 
    sudo update-initramfs -u
    
  3. रिबूट कंप्यूटर

  4. लॉगिन स्क्रीन पर, Ctrl+ Alt+ दबाएँ F1और अपने उपयोगकर्ता को लॉगिन करें।

  5. उस निर्देशिका पर जाएं जहां आपके पास CUDA ड्राइवर है, और चलाएं

    chmod a+x .
    sudo service lightdm stop
    sudo bash cuda-7.5.18_linux.run --no-opengl-libs
    
  6. इंस्टॉलेशन के दौरान:

    • EULA शर्तों को स्वीकार करें
    • NVIDIA चालक को स्थापित करने के लिए हाँ कहो
    • CUDA टूलकिट + ड्राइवर स्थापित करने के लिए हाँ कहें
    • CUDA नमूने स्थापित करने के लिए हाँ कहो
    • Nvidia के साथ किसी भी Xserver विन्यास के पुनर्निर्माण का कहना है
  7. जाँच करें कि क्या /dev/nvidia*फ़ाइलें मौजूद हैं। यदि वे नहीं करते हैं, तो निम्न कार्य करें

    sudo modprobe nvidia
    
  8. पर्यावरण पथ चर सेट करें

    export PATH=/usr/local/cuda-7.5/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
    
  9. ड्राइवर संस्करण सत्यापित करें

    cat /proc/driver/nvidia/version`
    
  10. CUDA ड्राइवर संस्करण की जाँच करें

    nvcc –V
    
  11. लाइटमैन को फिर से चालू करें

    sudo service lightdm start
    
  12. Ctrl+ Alt+ F7और GUI के माध्यम से सिस्टम में लॉगिन करें

  13. CUDA नमूने बनाएं, NVIDIA_CUDA-7.5_Samplesटर्मिनल के माध्यम से फ़ोल्डर पर जाएं , फिर निम्नलिखित कमांड चलाएं:

    make
    cd bin/x86_64/linux/release/
    ./deviceQuery
    ./bandwidthTest
    

    दोनों परीक्षणों को अंततः टर्मिनल में 'पास' का उत्पादन करना चाहिए

  14. सिस्टम को रिबूट करें


आपका बहुत बहुत धन्यवाद! यह अंत में मेरे Asus UX32VD (GeForce 620M के साथ ऑप्टिमस लैपटॉप) पर काम करता है। मैंने हर चीज और हर चीज की कोशिश की। कल मैं भौंरा के साथ काम कर रहा nvidia-352 प्राप्त कर सकता था, लेकिन CUDA टूलकिट स्थापित करने के बाद, मैं कोई भी नमूना नहीं चला सकता था (जैसे कि मेरे पास CUDA कार्ड नहीं था, और हाँ, मैं उपयोग कर रहा था optirun)। अन्य ड्राइवरों ने मुझे लॉगिन लूप या ब्लैक में देखा unity-greeter! मैं आपको पर्याप्त धन्यवाद नहीं दे सकता
:)

केवल एक चीज है कि मैं यहाँ बदलने के लिए जरूरत से था optionकरने के लिए optionsकाली सूची नोव्यू अनुभाग के भीतर।
TheM00s3

मेरे पास NVIDIA GeForce GTX 680 के साथ एक HP डेस्कटॉप है। आपके निर्देश में ज्यादातर काम किया गया है, सिवाय इसके कि ग्राफिक कार्ड ड्राइवर जो रन फाइल के साथ आता है ( cuda_7.5.18_linux.run) lightdmरीबूट करने के बाद काम छोड़ने का कारण बनता है (ग्रब के बाद, आपको अंतहीन फ़्लैश कर्सर के साथ एक काली स्क्रीन दिखाई देगी )। मेरा समाधान पहले उस ड्राइवर को अनइंस्टॉल करना था sudo apt-get purge nvidia-*, और इसे NVIDIA की आधिकारिक वेबसाइट से डाउनलोड की गई नवीनतम रन फ़ाइल का उपयोग करके इंस्टॉल करना था। और यह पूरी तरह से काम करता है। एक वैकल्पिक समाधान askubuntu.com/a/676772/194156
शिन

2

सूटिंग CUDA- ड्राइवर (ऑप्टिमस के लिए और हाइब्रिड मेनबोर्ड पर अन्य ग्राफिक्स-चिपसेट के लिए) स्थापित करने के दो तरीके हैं - पहला यहाँ वर्णित सबसे आसान है और दूसरा विवरण अधिक बोझिल लेकिन प्रभावी भी है:

ए)

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-355 nvidia-prime
sudo reboot

बी)

विधि बी का विवरण यहां है, लेकिन पहले से ही पुराना (उपयोगकर्ता dschinn1001 द्वारा समझाया गया है) - यह विधि बी अधिक विनम्र है और जोखिम भरा हो सकता है, लेकिन हानिकारक नहीं है। :

मैं Ubuntu13.04 में एनवीडिया ड्राइवर जीटी 520 और क्यूडा 5.0 कैसे स्थापित कर सकता हूं?

एनवीडिया को लिनक्स के लिए डाउनलोड करने के लिए बीटा-ड्राइवर-पैकेज यहां है:

http://www.nvidia.de/object/cuda_1_1_beta.html

विधि A अधिक सरल है, लेकिन यह स्पष्ट नहीं है कि यह xscreensaver और विधि B के साथ कैसे पुराना है, लेकिन ड्राइवर-पैकेज को हाल के समय में अपडेट किया गया है, और विधि B के बाद भी, यह xscreensaver कंडीशन के साथ बेहतर काम करना चाहिए जो xscreensaver है स्थापित। (मैं 13.10 पर विधि बी का परीक्षण किया और यह xscreensaver के साथ भी बहुत अच्छा काम कर रहा था। और मुझे लगता है कि इस थ्रेड का शेष हार्डवेयर तक है।)

इसके अलावा और ऑप्टिमस-ग्राफिक्स-चिपसेट के साथ भौंरा के संदर्भ में भौंरा के लिए ये समायोजन आवश्यक हैं:

14.04 में एनवीडिया ऑप्टिमस / भौंरा कैसे स्थापित करें


1

लग बग जैसा लगता है 1428972

उपयोगकर्ता fennytansy ने टिप्पणी में एक वर्कअराउंड जोड़ा # 10 :

sudo apt-get install libglew-dev libcheese7 libcheese-gtk23 libclutter-gst-2.0-0 libcogl15 libclutter-gtk-1.0-0 libclutter-1.0-0


मैं चलाने के बाद कमांड स्क्रीन काली हो गई। मैं केवल tty1 तक पहुंच सकता हूं? क्या आप कोई अन्य उपाय जानते हैं?
करेश अरुणकिरीनाथन

1

मैंने रफाइल विधि का उपयोग करके CUDA को सफलतापूर्वक स्थापित किया। यह सेटअप करने के लिए एक छोटे से जटिल काम है अपनी प्राथमिक ग्राफिक्स ड्राइवर क्योंकि भी runfile विधि (का उपयोग कर स्थापित किया जाना है यहाँ देखें )।

बस ड्राइवर स्थापित करने का प्रयास करें । यह रनफाइल विधि का उपयोग करके किया जा सकता है। यह आपको इंस्टॉल के प्रत्येक भाग के लिए संकेत देगा और आप GLपुस्तकालयों और टूलकिट को अक्षम कर सकते हैं । एकता नियंत्रण केंद्र मुझे CUDA नमूने के libGLU.soबजाय उपयोग करने की आवश्यकता के कारण मुद्दों के साथ-साथ दे रहा है libGL.so। अपने स्वयं के सीखने के उदाहरणों का निर्माण करते समय यह एक आसान समाधान है।


1

एनवीडिया ड्राइवर को अनइंस्टॉल करने की कोशिश करें, और इसके बिना सीधे क्यूडा स्थापित करें। एक नए Ubuntu 14.04 पर, मैंने एनवीडिया वेबसाइट के निर्देशों का पालन किया । चीजों के संगत संस्करणों (gcc, कर्नेल) को सत्यापित करने के अलावा, निर्देश थे:

sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb 
sudo apt-get update
sudo apt-get install cuda 

खुशी से, सही एनवीडिया ड्राइवर को ऊपर दिए गए चरणों के उप-उत्पाद के रूप में स्थापित किया गया था।


1

मैंने एक पूरा दिन बिताने के लिए " ड्राइवर: ग्राफिक्स-ड्राइवर / ppa " का उपयोग करने के लिए 352 संस्करण के लिए NVIDIA ड्राइवरों को अद्यतन करने की कोशिश की। सब कुछ विफल रहा। एक स्थापित करने के बाद, gpu-manager.log ने रिपोर्ट किया कि ड्राइवर स्थापित किए गए थे जबकि Xorg.0.log इसके विपरीत रिपोर्ट करेगा।

नोव्यू ड्राइवर को हटा दिया गया था और उसे ब्लैकलिस्ट किया गया था: sudo apt-get --purge remove xserver-xorg-video-nouveau cat /etc/modprobe.d/nouveau-nomodeset-jsrobin.conf ब्लैकलिस्ट nouveau ऑप्शंस nouveau मोडसेट = 0 उर्फ ​​nouveau एलबीएम-नोव्यू बंद

मैंने आखिरकार छोड़ दिया और एक शुद्ध रूप से "एनवीआईडीआईए ... बिन" समाधान का उपयोग किया।

  1. जैसा कि ऊपर दिखाया गया है, ब्लैक लिस्टेड नोव्यू।
  2. ऊपर बताए अनुसार पूरी तरह से नौसिखिए Xserver की स्थापना रद्द की।
  3. PCIe (दो एनवीडिया कार्ड) के लिए सिस्टम बायोस को प्राथमिक के रूप में सेट करें और मेनबोर्ड HD4600 इंटरफ़ेस को निष्क्रिय करें।
  4. पुनर्प्राप्ति मोड में बूट किया गया, सक्रिय नेटवर्क, फिर कंसोल मोड में गया।
  5. Ran "NVIDIA-Linux-x86_64-352.41.run -uninstall" यह सुनिश्चित करने के लिए कि कुछ भी नहीं बचा था।
  6. / Etc, / usr / स्थानीय में किसी भी पुरानी निर्देशिका को हटा दिया गया, जो कि पिछले cuda या nvidia इंस्टॉल के अवशेष की तरह लग रहा था।
  7. Ran "NVIDIA-Linux-x86_64-352.41.run"
  8. Ran "NVIDIA-Linux-x86_64-352.41.run --check" यह सत्यापित करने के लिए कि सब कुछ सही था (यह)।
  9. फिर इंस्टॉल पूरा करने के लिए "cuda_7.5.18_linux.run" चला। वर्तमान में काम कर रहे हैं। दोनों मॉनिटर काम कर रहे हैं। वर्तमान में क्यूडा नमूना फाइलों के निर्माण पर काम कर रहा है। NVIDIA स्थापित डिब्बे पर "--help" झंडे का उपयोग करना सुनिश्चित करें। मुख्य कारण मैंने बिन मार्ग पर जाने का फैसला किया (साथ ही काम न करने वाले विकल्पों में से एक के साथ, यह है कि "बिन" दृष्टिकोण "मेसा" ओपनगेल अपडेट के बाद वसूली का एक आसान मार्ग प्रदान करता है। परिणाम

1

मैंने आज उबंटू को रिबूट किया, और पाया कि एक और unmet निर्भरता है जैसे कि libcog15 : Depends: mesa-driver...(मुझे पूरा पैकेज नाम याद नहीं है), इसलिए मैं apt-get install"mesa- ड्राइवर" स्थापित करता था। उसके बाद, CUDA 7.5 सफलतापूर्वक स्थापित हुआ।

ध्यान दें कि मेरा कर्नेल संस्करण 3.19.0-28-जेनेरिक है और gcc संस्करण Ubuntu 4.8.4-2ubuntu1 ~ 14.04 है , जो CUDA 7.5 आधिकारिक दस्तावेजों में नहीं मिला है । मैं जांच करूंगा कि क्या यह वास्तव में काम करता है।


1
किसी कारण से मेरे कंप्यूटर पर mesa ड्राइवर ने बूट पर सभी प्रकार की एकता के मुद्दों का कारण बना और मेरे सिस्टम की पूर्ण विफलता का कारण बना। सावधान रहे।
asdf

@ ब्रूस यो - यह सामान्य रूप से केवल मेसा का मामला नहीं है, यह हाइब्रिड एनवीडिया-ग्राफिक्स-कार्ड पर चिपसेट पर निर्भर करता है, जो सभी अलग हैं। आपको मेरे समाधान पर भी विचार करना चाहिए। : ओ)
dschinn1001

0

मैंने sudo su और apt-get install cuda बजाय sudo apt-get install क्यूडा प्राप्त किया। इसने काम कर दिया।

 sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
 sudo apt-get update
 sudo su
 apt-get install cuda

ज्ञान साझा करने के लिए, उबंटू से पूछने के लिए आपका स्वागत है। हालाँकि, यह एक मंच नहीं है, यह एक प्रश्नोत्तर साइट है, इस सहायता दौरे की जाँच करें । दूसरों के जवाब की नकल करना (661266 उपयोगकर्ता) मदद नहीं करता है, जब आप पर्याप्त प्रतिष्ठा प्राप्त करते हैं तो आप वोट देने में सक्षम होते हैं।
user.dz

@Sneetsher आपकी टिप्पणी के लिए धन्यवाद। मैंने 661266 उपयोगकर्ता के उत्तर की कोशिश की है लेकिन यह काम नहीं किया। जब मैंने "सुडो" के बजाय "सु" का उपयोग किया, तो यह काम किया। मैं नहीं जानता कि वास्तव में क्यों। हालाँकि, इसने मेरे परीक्षण के साथ काम किया। मेरा मानना ​​है कि मेरे समाधान का प्रयास करने के दौरान यह किसी के लिए लायक है।
सॉफ्टगेरेको

0

कृपया देखें: https://github.com/astorfi/Caffe_Deep_Learning/blob/master/Installation/readme.md । यह संक्षेप में कैफ की स्थापना से संबंधित है लेकिन यह CUDA स्थापना को भी संबोधित करता है।


1
हाय @amirsani_torfi, ask.ubuntu में आपका स्वागत है। ध्यान दें कि आपके लिंक से संबंधित संभवतः पूछे गए प्रश्न को संबोधित करने के लिए आवश्यक जानकारी प्रदान कर सकता है, लिंक कभी भी हटाए जा सकते हैं। मेरा सुझाव है कि आप उस लिंक से महत्वपूर्ण जानकारी को शामिल करने के लिए अपने प्रश्न को संपादित करें।
Tshilidzi Mudau

-1

-वास्तविकता के साथ lightdm लॉग इन (लॉगिन लूप)

ड्राइवर आइसटॉल ("चालक स्थापना विफल: यह प्रतीत होता है, कि एक एक्स सर्वर चल रहा है ..." के साथ -problems)

उबंटू 16.04 64bit पर एक NVidia CUDA टूलकिट को सफलतापूर्वक स्थापित करने के लिए मुझे अभी करना है:

  1. पेनड्राइव पर उबंटू का लाइवमेज बनाएं (8 जीबी पेन पर्याप्त है) - इस तरह की कोशिश आपके मेजबान लिनक्स सिस्टम पर असफल इंस्टालेशन से पहले, एक टन नसों को बचाएगी !!!
  2. pendrive पर लाइव सत्र में प्रवेश करें ("स्थापित करने से पहले Ubuntu की कोशिश करें")
  3. लाइव सत्र में sudo उपयोगकर्ता जोड़ें:

    sudo adduser admin (#pass: admin1)

    sudo usermod -aG सुडो एडमिन

  4. लाइव सत्र से लॉगआउट करें, #admin के रूप में लॉग इन करें

  5. NVIDia आधिकारिक साइट से CUDA टूलकिट डाउनलोड करें (~ 1.5GB)
  6. डाउनलोड की गई इंस्टॉलर फ़ाइल के लिए विशेषाधिकारों को बदलें (इस चरण में
    सम्मिलित न हों !): sudo chmod + x cuda_X.X.run

  7. कंसोल दृश्य पर स्विच करें:

    Ctr + Alt + F1 (टर्मिनल दृश्य पर स्विच करने के लिए) Ctr + Alt + F7 (टर्मिनल दृश्य से ग्राफ़िकल सर्वर पर स्विच करने के लिए)

  8. कंसोल पर देखें (Ctr + Alt + F1) लॉग इन करें:

    लॉगिन: व्यवस्थापक पास: admin1

  9. चित्रमय चल सेवा बंद करें:

    sudo सेवा lightdm बंद करो

  10. जाँच करें कि क्या ग्राफिकल सर्वर बंद है - सीटीआर + Alt + F7 स्विच करने के बाद मॉनिटर खाली काला होना चाहिए, कंसोल दृश्य पर वापस स्विच करें सीटीआर + Alt + F1

  11. ऐसे कॉन्फ़िगरेशन के साथ CUDA टूलकिट स्थापित करें:

    sudo ./cuda_X.X.run (लाइसेंस रीड स्किप के लिए 'q' दबाएं) OpenGL लाइब्रेरी स्थापित न करें सिस्टम को अपडेट न करें एक्स कॉन्फ़िगरेशन अन्य विकल्प हां और पथ को डिफ़ॉल्ट रूप में बनाते हैं

  12. चित्रमय सर्वर चालू करें:

    sudo सेवा lightdm प्रारंभ

  13. उपयोगकर्ता के रूप में लॉग इन करें (यदि आप लाइव सत्र लॉग आउट में स्वचालित रूप से #ubuntu के रूप में लॉग इन करते हैं):

    लॉगिन: व्यवस्थापक पास: admin1

  14. GPU ब्लॉक पर सरल समानांतर वेक्टर राशि के साथ जो भी nvcc संकलक काम करता है उसकी जाँच करें:

    नई फ़ाइलों पर vecSum.cu और book.h को सहेजें, संकलन करें और टर्मिनल पर चलाएँ: /usr/local/cuda-8.0/bin/nvcc vecSum.cu && clear &&/a.out

  15. कंसोल कंसोल चेक करें - यह समान होना चाहिए: 0.000000 + 0.000000 = 0.000000

    -1.100000 + 0.630000 = -0.000000
    
    -2.200000 + 2.520000 = 0.319985
    
    -3.300000 + 5.670000 = 2.119756
    -4.400000 + 10.080000 = 5.679756
    -5.500000 + 15.750000 = 10.250000
    -6.600000 + 22.680000 = 16.017500
    -7.700000 + 30.870001 = 23.170002
    -8.800000 + 40.320000 = 31.519997
    -9.900000 + 51.029999 = 41.129967
    
  16. अगर सबकुछ pendrive live session पर अच्छा गया, तो अपने host linux system पर भी ऐसा ही करें

पीएस कृपया ध्यान दें कि यह आदर्श ट्यूटोरियल नहीं है, लेकिन मेरे लिए ठीक काम करता है!

======= vecSum.cu =====

#include "book.h"
#define N 50000
///usr/local/cuda-8.0/bin/nvcc vecSum.cu && clear && ./a.out

//"HOST" = CPU
//"Device" = GPU

__global__ void add( float *a, float *b, float *c )
{
    int tid = blockIdx.x;
    if ( tid < N )
        c[ tid ] = a[ tid ] + b[ tid ];
}

int main ( void )
{
    float a[ N ], b[ N ], c[ N ];
    float *dev_a, *dev_b, *dev_c;
    //GPU memory allocation
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_a, N * sizeof( float ) ) );
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_b, N * sizeof( float ) ) );
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_c, N * sizeof( float ) ) );

    //sample input vectors CPU generation
    for ( int i = 0; i < N; i++ )
    {
        a[ i ] = -i * 1.1;
        b[ i ] = i * i * 0.63;
    }

    //copy/load from CPU to GPU data vectors a[], b[] HostToDevice
    HANDLE_ERROR( cudaMemcpy( dev_a, a, N * sizeof( float ), cudaMemcpyHostToDevice ) );
    HANDLE_ERROR( cudaMemcpy( dev_b, b, N * sizeof( float ), cudaMemcpyHostToDevice ) );

    //calculate sum of vectors on GPU
    add<<<N,1>>> ( dev_a, dev_b, dev_c );

    //copy/load result vector from GPU to CPU c[] DeviceToHost
    HANDLE_ERROR( cudaMemcpy( c, dev_c, N * sizeof( float ), cudaMemcpyDeviceToHost ) );

    //printout results
    for ( int i = 0; i < 10; i++ ) printf( "%f + %f = %f\n", a[ i ], b[ i ], c[ i ] );

    //free memory and constructed objects on GPU
    cudaFree( dev_a );
    cudaFree( dev_b );
    cudaFree( dev_c );

    return 0;
}

========= पुस्तक।ह ======

/*
 * Copyright 1993-2010 NVIDIA Corporation.  All rights reserved.
 *
 * NVIDIA Corporation and its licensors retain all intellectual property and
 * proprietary rights in and to this software and related documentation.
 * Any use, reproduction, disclosure, or distribution of this software
 * and related documentation without an express license agreement from
 * NVIDIA Corporation is strictly prohibited.
 *
 * Please refer to the applicable NVIDIA end user license agreement (EULA)
 * associated with this source code for terms and conditions that govern
 * your use of this NVIDIA software.
 *
 */


#ifndef __BOOK_H__
#define __BOOK_H__
#include <stdio.h>

static void HandleError( cudaError_t err,
                         const char *file,
                         int line ) {
    if (err != cudaSuccess) {
        printf( "%s in %s at line %d\n", cudaGetErrorString( err ),
                file, line );
        exit( EXIT_FAILURE );
    }
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))


#define HANDLE_NULL( a ) {if (a == NULL) { \
                            printf( "Host memory failed in %s at line %d\n", \
                                    __FILE__, __LINE__ ); \
                            exit( EXIT_FAILURE );}}

template< typename T >
void swap( T& a, T& b ) {
    T t = a;
    a = b;
    b = t;
}


void* big_random_block( int size ) {
    unsigned char *data = (unsigned char*)malloc( size );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}

int* big_random_block_int( int size ) {
    int *data = (int*)malloc( size * sizeof(int) );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}


// a place for common kernels - starts here

__device__ unsigned char value( float n1, float n2, int hue ) {
    if (hue > 360)      hue -= 360;
    else if (hue < 0)   hue += 360;

    if (hue < 60)
        return (unsigned char)(255 * (n1 + (n2-n1)*hue/60));
    if (hue < 180)
        return (unsigned char)(255 * n2);
    if (hue < 240)
        return (unsigned char)(255 * (n1 + (n2-n1)*(240-hue)/60));
    return (unsigned char)(255 * n1);
}

__global__ void float_to_color( unsigned char *optr,
                              const float *outSrc ) {
    // map from threadIdx/BlockIdx to pixel position
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int offset = x + y * blockDim.x * gridDim.x;

    float l = outSrc[offset];
    float s = 1;
    int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
    float m1, m2;

    if (l <= 0.5f)
        m2 = l * (1 + s);
    else
        m2 = l + s - l * s;
    m1 = 2 * l - m2;

    optr[offset*4 + 0] = value( m1, m2, h+120 );
    optr[offset*4 + 1] = value( m1, m2, h );
    optr[offset*4 + 2] = value( m1, m2, h -120 );
    optr[offset*4 + 3] = 255;
}

__global__ void float_to_color( uchar4 *optr,
                              const float *outSrc ) {
    // map from threadIdx/BlockIdx to pixel position
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int offset = x + y * blockDim.x * gridDim.x;

    float l = outSrc[offset];
    float s = 1;
    int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
    float m1, m2;

    if (l <= 0.5f)
        m2 = l * (1 + s);
    else
        m2 = l + s - l * s;
    m1 = 2 * l - m2;

    optr[offset].x = value( m1, m2, h+120 );
    optr[offset].y = value( m1, m2, h );
    optr[offset].z = value( m1, m2, h -120 );
    optr[offset].w = 255;
}


#if _WIN32
    //Windows threads.
    #include <windows.h>

    typedef HANDLE CUTThread;
    typedef unsigned (WINAPI *CUT_THREADROUTINE)(void *);

    #define CUT_THREADPROC unsigned WINAPI
    #define  CUT_THREADEND return 0

#else
    //POSIX threads.
    #include <pthread.h>

    typedef pthread_t CUTThread;
    typedef void *(*CUT_THREADROUTINE)(void *);

    #define CUT_THREADPROC void
    #define  CUT_THREADEND
#endif

//Create thread.
CUTThread start_thread( CUT_THREADROUTINE, void *data );

//Wait for thread to finish.
void end_thread( CUTThread thread );

//Destroy thread.
void destroy_thread( CUTThread thread );

//Wait for multiple threads.
void wait_for_threads( const CUTThread *threads, int num );

#if _WIN32
    //Create thread
    CUTThread start_thread(CUT_THREADROUTINE func, void *data){
        return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, data, 0, NULL);
    }

    //Wait for thread to finish
    void end_thread(CUTThread thread){
        WaitForSingleObject(thread, INFINITE);
        CloseHandle(thread);
    }

    //Destroy thread
    void destroy_thread( CUTThread thread ){
        TerminateThread(thread, 0);
        CloseHandle(thread);
    }

    //Wait for multiple threads
    void wait_for_threads(const CUTThread * threads, int num){
        WaitForMultipleObjects(num, threads, true, INFINITE);

        for(int i = 0; i < num; i++)
            CloseHandle(threads[i]);
    }

#else
    //Create thread
    CUTThread start_thread(CUT_THREADROUTINE func, void * data){
        pthread_t thread;
        pthread_create(&thread, NULL, func, data);
        return thread;
    }

    //Wait for thread to finish
    void end_thread(CUTThread thread){
        pthread_join(thread, NULL);
    }

    //Destroy thread
    void destroy_thread( CUTThread thread ){
        pthread_cancel(thread);
    }

    //Wait for multiple threads
    void wait_for_threads(const CUTThread * threads, int num){
        for(int i = 0; i < num; i++)
            end_thread( threads[i] );
    }

#endif




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