มีใครติดตั้ง CUDA 7.5 สำเร็จบน Ubuntu 14.04.3 LTS x86_64 หรือไม่


12

เวิร์กสเตชันของฉันมี GPU สองตัว (Quadro K5200 และ Quadro 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 ระบบปฏิบัติการของฉันเพิ่งติดตั้งและได้ทำการอัพเดตซอฟต์แวร์และติดตั้งไดรเวอร์ Nvidia ล่าสุด

คุณช่วยได้ไหม ขอบคุณล่วงหน้า!

คำตอบ:


8

การติดตั้ง CUDA นั้นยุ่งยากเล็กน้อย ฉันได้ทำตามขั้นตอนต่อไปนี้แล้วและมันก็ใช้ได้ผลสำหรับฉัน คุณสามารถอ้างถึงลิงค์นี้ได้เช่นกัน

การยืนยันของสภาพแวดล้อม:

  1. lspci | grep -i nvidia (ยืนยันว่าข้อมูลของบอร์ด NVIDIA แสดงขึ้นมา)

  2. uname -m (ตรวจสอบให้แน่ใจว่าเป็น x86_64)

  3. gcc --version (ตรวจสอบให้แน่ใจว่าได้ติดตั้งแล้ว)

การติดตั้ง CUDA -

  1. ดาวน์โหลดcuda_7.5.18_linux.runไฟล์จากhttps://developer.nvidia.com/cuda-downloads

  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 Toolkit + Driver
    • พูดว่าใช่เพื่อติดตั้งตัวอย่าง CUDA
    • อย่าบอกว่ากำลังสร้างการกำหนดค่า Xserver ใหม่ด้วย Nvidia
  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. เปิด lightdm อีกครั้ง

    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
    

    การทดสอบทั้งสองควรส่งออก 'PASS' ในท้ายที่สุด

  14. รีบูทระบบ


ขอบคุณมาก! ในที่สุดมันก็ใช้งานได้กับ Asus UX32VD ของฉัน (โน้ตบุ๊ก Optimus ที่มี GeForce 620M) ฉันลองทุกอย่างและทุกอย่าง เมื่อวานฉันสามารถทำให้ nvidia-352 ทำงานกับ Bumblebee ได้ แต่หลังจากติดตั้งชุดเครื่องมือ CUDA ฉันไม่สามารถเรียกใช้ตัวอย่างใด ๆ ได้ (ราวกับว่าฉันไม่มีการ์ด CUDA และใช่ฉันใช้อยู่optirun) ไดรเวอร์อื่น ๆ กลับกลายฉันเข้าสู่ลูปเข้าสู่ระบบหรือสีดำunity-greeter! ฉันไม่สามารถขอบคุณมากพอ
:)

สิ่งเดียวที่ฉันต้องการที่จะเปลี่ยนที่นี่ก็มาจากoptionการoptionsอยู่ในส่วนนูโวบัญชีดำ
TheM00s3

ฉันมีเดสก์ท็อป HP ที่มี NVIDIA GeForce GTX 680 คำสั่งของคุณใช้งานได้เป็นส่วนใหญ่ยกเว้นว่าไดรเวอร์การ์ดกราฟิกที่มาพร้อมกับไฟล์ run ( cuda_7.5.18_linux.run) ทำให้lightdmการออกจากการทำงานหลังจากรีบูตเครื่อง (หลังจากด้วงคุณจะเห็นหน้าจอสีดำ ) วิธีการแก้ปัญหาของฉันคือการถอนการติดตั้งไดร์เวอร์ตัวsudo apt-get purge nvidia-*นั้นก่อนและติดตั้งโดยใช้ไฟล์รันล่าสุดที่ดาวน์โหลดจากเว็บไซต์ทางการของ NVIDIA และมันทำงานได้อย่างสมบูรณ์แบบ โซลูชันทางเลือกจะเป็นวิธีแก้ปัญหา (A) ในaskubuntu.com/a/676772/194156
ซิน

2

มีสองวิธีในการติดตั้งสิ่งทอสำหรับทำชุดเสื้อผ้าไดรเวอร์ CUDA (สำหรับ Optimus และชิปเซ็ตกราฟิกในตัวบนเมนบอร์ดไฮบริด) - การอธิบายครั้งแรกที่นี่เป็นวิธีที่ง่ายที่สุดและคำอธิบายที่สองนั้นยุ่งยากมากขึ้น แต่ก็มีประสิทธิภาพเช่นกัน:

A)

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

B)

คำอธิบายของวิธีการ B อยู่ที่นี่ แต่เก่ากว่า (อธิบายโดยผู้ใช้ dschinn1001) - วิธีนี้ B นั้นเจียมเนื้อเจียมตัวมากกว่าและมีความเสี่ยง แต่ไม่เป็นอันตราย :

ฉันจะติดตั้ง Nvidia Driver GT 520 และ Cuda 5.0 ใน Ubuntu13.04 ได้อย่างไร

แพ็คเกจไดร์เวอร์เบต้าสำหรับ Nvidia เพื่อดาวน์โหลดสำหรับ Linux อยู่ที่นี่:

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

วิธี A นั้นง่ายกว่า แต่ไม่ชัดเจนว่ามันโต้ตอบกับ xscreensaver หรือไม่และวิธี B นั้นเก่ากว่า แต่แพ็คเกจของไดรเวอร์นั้นได้รับการปรับปรุงด้วยในช่วงเวลาที่ผ่านมาและหลังจากวิธี B เสร็จแล้วมันควรทำงานได้ดีขึ้นด้วย xscreensaver การติดตั้ง (ฉันทดสอบวิธี B ใน 13.10 และสิ่งนี้ทำงานได้ดีมากแม้กับ xscreensaver และฉันคิดว่าส่วนที่เหลือของเธรดนี้ขึ้นอยู่กับฮาร์ดแวร์)

นอกจากนี้ในการอ้างอิงถึง bumblebee ด้วย Optimus-graphics-chipsets การปรับค่าเหล่านี้สำหรับ bumblebee ก็มีความจำเป็นเช่นกัน:

วิธีการตั้งค่า nVidia Optimus / Bumblebee ใน 14.04


1

เสียงเหมือนlp ข้อผิดพลาด 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 ได้หรือไม่ คุณรู้วิธีแก้ปัญหาอื่น ๆ หรือไม่?
Karesh Arunakirinathan

1

ฉันติดตั้ง CUDA สำเร็จโดยใช้วิธีการ runfile มันเป็นเพียงเล็กน้อย trickier เพราะการติดตั้งไดรเวอร์กราฟิกหลักของคุณยังจะต้องมีการติดตั้งโดยใช้วิธีการ runfile นี้ ( ดูที่นี่ )

ลองติดตั้งเฉพาะไดรเวอร์ ซึ่งสามารถทำได้โดยใช้วิธี runfile มันจะแจ้งให้คุณทราบสำหรับแต่ละส่วนของการติดตั้งและคุณสามารถปิดการใช้งานGLไลบรารีและชุดเครื่องมือ ศูนย์ควบคุมความสามัคคีได้รับการให้ฉันบางประเด็นเป็นอย่างดีด้วยเนื่องจากความต้องการตัวอย่าง CUDA ที่จะใช้แทนlibGLU.so libGL.soนี่คือการแก้ไขที่ง่ายเมื่อสร้างตัวอย่างการเรียนรู้ของคุณเอง


1

ลองถอนการติดตั้งไดรเวอร์ nvidia และติดตั้ง cuda โดยตรงโดยไม่ต้องใช้ บน Ubuntu 14.04 ใหม่ฉันทำตามคำแนะนำจากเว็บไซต์nvidia นอกเหนือจากการตรวจสอบเวอร์ชันที่เข้ากันได้ของสิ่งต่าง ๆ (gcc, kernel) คำแนะนำคือ:

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

มีความสุขที่ติดตั้งไดรเวอร์ nvidia ที่ถูกต้องเป็นผลพลอยได้จากขั้นตอนข้างต้น


1

ฉันใช้เวลาทั้งวันเพื่อค้นหา " ppa: graphics-drivers / ppa " เพื่ออัปเดตไดรเวอร์ NVIDIA เป็นรุ่น 352 ทุกอย่างล้มเหลว หลังจากติดตั้งครั้งเดียว gpu-manager.log รายงานว่ามีการติดตั้งไดรเวอร์ในขณะที่ Xorg.0.log จะรายงานตรงกันข้าม

ไดรเวอร์นูโวได้ถูกลบและขึ้นบัญชีดำ: sudo apt-get --purge ลบ xserver-xorg-video-nouveau cat /etc/modprobe.d/nouveau-nomodeset-jsrobin.conf ตัวเลือก blacklist Nouvau mode = 0 alias nouveau off lbm-Nouveau ปิด

ในที่สุดฉันก็ยอมแพ้และใช้โซลูชัน "NVIDIA ... bin" อย่างหมดจด

  1. Nouveau ที่ขึ้นบัญชีดำตามที่แสดงไว้ด้านบน
  2. ถอนการติดตั้งอย่างสมบูรณ์ Nouveau Xserver ตามที่อ้างถึงข้างต้น
  3. ตั้งค่าไบออสระบบให้มี PCIe (การ์ด nvidia สองการ์ด) เป็นอุปกรณ์หลักและปิดการใช้งานอินเทอร์เฟซของเมนบอร์ด HD4600
  4. บูตเข้าสู่โหมดการกู้คืนเครือข่ายที่เปิดใช้งานจากนั้นไปที่โหมดคอนโซล
  5. รัน "NVIDIA-Linux-x86_64-352.41.run -uninstall" เพื่อให้แน่ใจว่าไม่มีอะไรเหลืออยู่
  6. ลบไดเร็กทอรีเก่า ๆ ใน / etc, / usr / local ที่ดูเหมือนเศษของ cuda หรือ nvidia ที่ติดตั้งในอดีต
  7. Ran "NVIDIA-Linux-x86_64-352.41.run"
  8. เรียกใช้ "NVIDIA-Linux-x86_64-352.41.run - ตรวจสอบ" เพื่อยืนยันว่าทุกอย่างถูกต้อง (เป็น)
  9. จากนั้นจึงรัน "cuda_7.5.18_linux.run" เพื่อทำการติดตั้งให้เสร็จสมบูรณ์ สิ่งที่กำลังทำงานอยู่ จอภาพทั้งสองทำงานแล้ว กำลังทำงานในการสร้างไฟล์ตัวอย่าง cuda ให้ใช้ธง "- ช่วยเหลือ" ในถังขยะ NVIDIA ติดตั้ง เหตุผลหลักที่ฉันตัดสินใจไปเส้นทางบิน (พร้อมกับหนึ่งในทางเลือกที่ไม่ทำงานคือวิธี "ช่อง" ให้เส้นทางที่ง่ายต่อการกู้คืนหลังจากอัปเดต OpenGL "เมซ่า" ผลลัพธ์

1

ฉันรีบูต Ubuntu ในวันนี้และพบว่ามีการพึ่งพาที่ไม่คาดคิดบางอย่างเช่นlibcog15 : Depends: mesa-driver...(ฉันจำชื่อแพคเกจเต็มไม่ได้) ดังนั้นฉันจึงเคยapt-get installติดตั้ง "mesa-driver" หลังจากนั้น CUDA 7.5 ติดตั้งสำเร็จ

หมายเหตุว่ารุ่นเคอร์เนลของฉันคือ3.19.0-28 ทั่วไปและรุ่น GCC เป็นอูบุนตู 4.8.4-2ubuntu1 ~ 14.04ซึ่งไม่ได้พบได้ที่CUDA 7.5 เอกสารอย่างเป็นทางการ ฉันจะตรวจสอบว่ามันใช้งานได้จริง


1
ด้วยเหตุผลบางอย่างไดรเวอร์ mesa ในคอมพิวเตอร์ของฉันทำให้เกิดปัญหาความสามัคคีในการบู๊ตและทำให้ระบบของฉันล้มเหลว ระวัง.
asdf

@ Bruce Yo - โดยทั่วไปไม่เพียง แต่เรื่องของ mesa เท่านั้นมันขึ้นอยู่กับชิปเซ็ตของการ์ดกราฟิก nvidia ไฮบริดซึ่งแตกต่างกันทั้งหมด คุณควรพิจารณาวิธีแก้ปัญหาของฉันด้วย : o)
dschinn1001

0

ฉันลอง sudo su และ apt-get install cuda แทน sudo apt-get install cuda มันได้ผล

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

ยินดีต้อนรับสู่ถาม Ubuntu ยินดีที่ได้รู้จักการแบ่งปันความรู้ อย่างไรก็ตามนี่ไม่ใช่ฟอรัมนี่เป็นเว็บไซต์ถามตอบตรวจสอบทัวร์ช่วยเหลือนี้ คำตอบอื่น ๆ ที่ซ้ำกัน (จากผู้ใช้ 661266 คน) ไม่ได้ช่วยคุณจะสามารถโหวตได้เมื่อคุณได้รับชื่อเสียงมากพอ
user.dz

@Sneetsher ขอบคุณสำหรับความคิดเห็นของคุณ ฉันได้ลองคำตอบของผู้ใช้ 661266 แล้ว แต่มันไม่ทำงาน เมื่อฉันใช้ "su" แทน "sudo" มันใช้ได้ ฉันไม่รู้ว่าทำไม อย่างไรก็ตามมันทำงานกับการทดลองของฉัน ฉันเชื่อว่ามันคุ้มค่าสำหรับใครบางคนในขณะที่ลองวิธีแก้ปัญหาของฉัน
softgearko

0

โปรดดูที่: https://github.com/astorfi/Caffe_Deep_Learning/blob/master/Installation/readme.md มันเกี่ยวข้องกับการติดตั้ง Caffe ในสาระสำคัญ แต่มันอยู่ติดตั้ง CUDA เช่นกัน


1
สวัสดี @amirsani_torfi ยินดีต้อนรับสู่ถาม Ubuntu โปรดทราบว่าในขณะที่ลิงก์ของคุณอาจให้ข้อมูลที่จำเป็นในการตอบคำถามที่ถามลิงค์สามารถลบออกได้ตลอดเวลา ฉันขอแนะนำให้คุณแก้ไขคำถามของคุณเพื่อรวมข้อมูลที่สำคัญจากลิงก์นั้น
Tshilidzi Mudau

-1

- ปัญหากับการเข้าสู่ระบบ lightdm (เข้าสู่ระบบห่วง)

- ปัญหากับไดรเวอร์ istall ("การติดตั้งไดรเวอร์ล้มเหลว: ปรากฏว่าเซิร์ฟเวอร์ X กำลังทำงาน ... ")

หากต้องการติดตั้ง NVidia CUDA Toolkit บน Ubuntu 16.04 64 บิตฉันต้องทำดังนี้

  1. สร้าง liveImage ของ Ubuntu บน pendrive (ปากกา 8GB ก็เพียงพอ) - ความพยายามดังกล่าวจะช่วยลดความเครียดได้ก่อนที่จะติดตั้งบนระบบ Linux โฮสต์ของคุณไม่สำเร็จ !!!
  2. เข้าสู่ระบบในเซสชันจริงบน pendrive ("ลอง Ubuntu ก่อนติดตั้ง")
  3. เพิ่มผู้ใช้ sudo ที่เซสชันสด:

    ผู้ดูแลระบบ sudo adduser (#pass: admin1)

    sudo usermod -aG ผู้ดูแลระบบ sudo

  4. ออกจากระบบเซสชันสดล็อกอินเป็น #admin

  5. ดาวน์โหลด CUDA Toolkit จากเว็บไซต์อย่างเป็นทางการของ NVidia (~ 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. ตรวจสอบว่าเซิร์ฟเวอร์กราฟิกปิด - หลังจากเปลี่ยน Ctr + Alt + F7 จอภาพควรเป็นสีดำว่างเปล่าสลับกลับไปที่มุมมองคอนโซล Ctr + Alt + F1

  11. ติดตั้ง CUDA Toolkit ด้วยการกำหนดค่าดังกล่าว:

    sudo ./cuda_X.X.run (กด 'q' เพื่อข้ามการอ่านใบอนุญาต) อย่าติดตั้งไลบรารี OpenGL ไม่อัปเดตการกำหนดค่าระบบ X ตัวเลือกอื่นทำให้ใช่และเส้นทางเป็นค่าเริ่มต้น

  12. เปิดเซิร์ฟเวอร์กราฟิก:

    sudo service lightdm เริ่มทำงาน

  13. เข้าสู่ระบบในฐานะผู้ใช้ (หากคุณเข้าสู่ระบบโดยอัตโนมัติในฐานะ #ubuntu ที่การออกจากระบบแบบสด):

    เข้าสู่ระบบ: ผู้ดูแลระบบผ่าน: admin1

  14. ตรวจสอบสิ่งที่คอมไพเลอร์ nvcc ทำงานร่วมกับผลรวมเวกเตอร์แบบขนานที่เรียบง่ายที่ GPU Blocks:

    บันทึก vecSum.cu และ book.h ที่ไฟล์ใหม่คอมไพล์และรันที่เทอร์มินัล: /usr/local/cuda-8.0/bin/nvcc vecSum.cu && clear && ./a.out

  15. checkout printout - ควรคล้ายกับ: 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 ให้ทำเช่นเดียวกันกับระบบโฮสต์ Linux ของคุณ

PS โปรดทราบว่ามันไม่ได้เป็นกวดวิชาที่เหมาะ แต่ทำงานได้ดีสำหรับฉัน!

======= 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;
}

========= book.h ======

/*
 * 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__
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.