GPU Emulator สำหรับการเขียนโปรแกรม CUDA โดยไม่ต้องใช้ฮาร์ดแวร์ [ปิด]


111

คำถาม: มีอีมูเลเตอร์สำหรับการ์ด Geforce ที่อนุญาตให้ฉันตั้งโปรแกรมและทดสอบ CUDA โดยไม่ต้องมีฮาร์ดแวร์จริงหรือไม่?


ข้อมูล:

ฉันต้องการเร่งการจำลองของฉันใน CUDA แต่ปัญหาของฉันคือฉันไม่ได้อยู่ใกล้เดสก์ท็อปของฉันในการพัฒนานี้ ฉันต้องการทำงานบนเน็ตบุ๊กแทน แต่เน็ตบุ๊กของฉันไม่มี GPU เท่าที่ฉันรู้คุณต้องมี GPU ที่รองรับ CUDA เพื่อเรียกใช้ CUDA มีวิธีแก้ปัญหานี้หรือไม่? ดูเหมือนว่าวิธีเดียวคือตัวจำลอง GPU (ซึ่งเห็นได้ชัดว่าจะช้าอย่างเจ็บปวด แต่ก็ใช้งานได้) แต่ไม่ว่าจะทำด้วยวิธีใดฉันก็อยากได้ยิน

ฉันกำลังเขียนโปรแกรมบน Ubuntu 10.04 LTS


ที่เกี่ยวข้อง: ด้วย AMD GPU: stackoverflow.com/questions/12828268/…บนกราฟิกรวมของ Intel: stackoverflow.com/questions/8193242/can-i-run-cuda-on-intel
Ciro Santilli 郝海东冠状病六四事件法轮功

คำตอบ:


39

สำหรับผู้ที่กำลังมองหาคำตอบในปี 2559 (และปี 2560) ...


ข้อจำกัดความรับผิดชอบ

  • ฉันไม่สามารถเลียนแบบ GPU ได้
  • อาจเป็นไปได้ที่จะใช้gpuocelotหากคุณปฏิบัติตามรายการการอ้างอิง

ฉันพยายามหาโปรแกรมจำลองสำหรับ BunsenLabs (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU / Linux)

ฉันจะบอกคุณว่าฉันได้เรียนรู้อะไรบ้าง


  1. nvccเคยมี-deviceemuตัวเลือกกลับมาใน CUDA Toolkit 3.0

    ฉันดาวน์โหลด CUDA Toolkit 3.0 ติดตั้งและพยายามเรียกใช้โปรแกรมง่ายๆ:

    #include <stdio.h>
    
    __global__ void helloWorld() {
        printf("Hello world! I am %d (Warp %d) from %d.\n",
            threadIdx.x, threadIdx.x / warpSize, blockIdx.x);
    }
    
    int main() {
        int blocks, threads;
        scanf("%d%d", &blocks, &threads);
        helloWorld<<<blocks, threads>>>();
        cudaDeviceSynchronize();
        return 0;
    }
    

    โปรดทราบว่าใน CUDA Toolkit 3.0 nvccอยู่ในไฟล์/usr/local/cuda/bin/.

    ปรากฎว่าฉันมีปัญหาในการรวบรวม:

    NOTE: device emulation mode is deprecated in this release
          and will be removed in a future release.
    
    /usr/include/i386-linux-gnu/bits/byteswap.h(47): error: identifier "__builtin_bswap32" is undefined
    
    /usr/include/i386-linux-gnu/bits/byteswap.h(111): error: identifier "__builtin_bswap64" is undefined
    
    /home/user/Downloads/helloworld.cu(12): error: identifier "cudaDeviceSynchronize" is undefined
    
    3 errors detected in the compilation of "/tmp/tmpxft_000011c2_00000000-4_helloworld.cpp1.ii".
    

    ฉันพบบนอินเทอร์เน็ตว่าถ้าฉันใช้gcc-4.2หรือใช้แบบโบราณแทนgcc-4.9.2ข้อผิดพลาดอาจหายไป ฉันยอมแพ้.


  2. gpuocelot

    คำตอบโดย Stringer มีลิงก์ไปยังgpuocelotเว็บไซต์โครงการที่เก่ามาก ตอนแรกฉันคิดว่าโครงการนี้ถูกยกเลิกในปี 2555 หรือประมาณนั้น ที่จริงแล้วมันถูกทิ้งร้างในไม่กี่ปีต่อมา

    นี่คือบางเว็บไซต์ที่ทันสมัย:

    ฉันพยายามที่จะติดตั้งต่อไปนี้ gpuocelot คู่มือ ฉันมีข้อผิดพลาดหลายอย่างระหว่างการติดตั้งและฉันก็ล้มเลิกอีกครั้ง gpuocelotไม่รองรับอีกต่อไปและขึ้นอยู่กับชุดของไลบรารีและซอฟต์แวร์เวอร์ชันที่เฉพาะเจาะจงมาก

    คุณอาจลองทำตามบทแนะนำนี้ตั้งแต่เดือนกรกฎาคม 2015 แต่ฉันไม่รับประกันว่าจะได้ผล ฉันไม่ได้ทดสอบ


  3. มจร

    เฟรมเวิร์กการแปล MCUDA เป็นเครื่องมือที่ใช้ลินุกซ์ที่ออกแบบมาเพื่อรวบรวมโมเดลการเขียนโปรแกรม CUDA เข้ากับสถาปัตยกรรม CPU อย่างมีประสิทธิภาพ

    มันอาจมีประโยชน์ นี่คือการเชื่อมโยงไปยังเว็บไซต์


  4. ขยะ CUDA

    เป็นโปรแกรมจำลองสำหรับใช้กับ Windows 7 และ 8 ฉันไม่ได้ลองใช้ ดูเหมือนว่าจะไม่ได้รับการพัฒนาอีกต่อไป (คอมมิตสุดท้ายลงวันที่ 4 ก.ค. 2556)

    นี่คือลิงค์ไปยังเว็บไซต์ของโครงการ: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    ปรับปรุงล่าสุด: 12.03.2017

    ในฐานะที่เป็นdashesyชี้ให้เห็นในความคิดเห็นที่CU2CLน่าจะเป็นโครงการที่น่าสนใจ ดูเหมือนว่าจะสามารถแปลรหัส CUDA เป็นรหัส OpenCL ได้ ดังนั้นหาก GPU ของคุณสามารถรันโค้ด OpenCL ได้โครงการ CU2CL อาจเป็นที่สนใจของคุณ

    ลิงค์:


4
เป็นที่น่าเสียดาย! การไม่จัดเตรียมเส้นทางที่ช้าจึงเป็นเรื่องยากมากที่จะสร้างและทดสอบแอปพลิเคชันบนเครื่องใดก็ได้ ซึ่งหมายความว่านักพัฒนาควรหลีกเลี่ยงการเพิ่มการพึ่งพาให้กับ Cuda ยังคงใช้งานได้โดยมือสมัครเล่นและนักวิจัยสำหรับโครงการครั้งเดียว ไม่ใช่สำหรับการใช้งานจริงสำหรับลูกค้า
มืดมน

3
CU2CLดูเหมือนจะใช้งานได้และก็น่าดูเช่นกัน
มืดมน

1
1. nvcc -deviceemu
นาธาน

2
4. ได้CUDA Wasteทำงาน
นาธาน

2
5. ได้CU2CLทำงาน
นาธาน

41

คำตอบนี้อาจจะสายเกินไป แต่ก็น่าสังเกตอยู่ดี GPU Ocelot ( ซึ่งฉันเป็นหนึ่งในผู้สนับสนุนหลัก ) สามารถคอมไพล์ได้โดยไม่ต้องติดตั้งไดรเวอร์อุปกรณ์ CUDA (libcuda.so) หากคุณต้องการใช้แบ็กเอนด์ Emulator หรือ LLVM ฉันได้แสดงโปรแกรมจำลองบนระบบที่ไม่มี NVIDIA GPU

ตัวจำลองพยายามใช้ข้อกำหนด PTX 1.4 และ PTX 2.1 อย่างซื่อสัตย์ซึ่งอาจรวมถึงคุณลักษณะที่ GPU รุ่นเก่าไม่รองรับ นักแปล LLVM มุ่งมั่นในการแปลจาก PTX เป็น x86 ที่ถูกต้องและมีประสิทธิภาพซึ่งหวังว่าจะทำให้ CUDA เป็นวิธีที่มีประสิทธิภาพในการเขียนโปรแกรมซีพียูแบบมัลติคอร์และ GPU -deviceemuเป็นคุณลักษณะที่เลิกใช้งานของ CUDA มาระยะหนึ่งแล้ว แต่ตัวแปล LLVM นั้นเร็วกว่าเสมอ

นอกจากนี้ตัวตรวจสอบความถูกต้องหลายตัวถูกสร้างขึ้นในอีมูเลเตอร์เพื่อตรวจสอบ: การเข้าถึงหน่วยความจำที่จัดแนวการเข้าถึงหน่วยความจำแบบแบ่งใช้จะได้รับการซิงโครไนซ์อย่างเหมาะสมและการยกเลิกการอ้างอิงหน่วยความจำส่วนกลางจะเข้าถึงพื้นที่หน่วยความจำที่จัดสรร นอกจากนี้เรายังได้ติดตั้งดีบักเกอร์แบบโต้ตอบบรรทัดคำสั่งซึ่งได้รับแรงบันดาลใจจาก gdb เป็นขั้นตอนเดียวผ่านเมล็ด CUDA ตั้งจุดพักและจุดเฝ้าดู ฯลฯ ... เครื่องมือเหล่านี้ได้รับการพัฒนาโดยเฉพาะเพื่อเร่งการดีบักโปรแกรม CUDA คุณอาจพบว่ามีประโยชน์

ขออภัยเกี่ยวกับด้าน Linux เท่านั้น เราได้เริ่มต้นสาขา Windows ( เช่นเดียวกับพอร์ต Mac OS X ) แต่ภาระด้านวิศวกรรมนั้นมีมากพอที่จะทำให้เราเครียดกับงานวิจัยของเราได้ หากใครมีเวลาและความสนใจก็อาจต้องการให้เราช่วยสนับสนุน Windows!

หวังว่านี่จะช่วยได้


3
สวัสดี - คุณยังอยู่หรือเปล่า? มีเอกสารเกี่ยวกับวิธีสร้างโปรแกรมด้วย Ocelot บนสภาพแวดล้อมการสร้าง CUDA ที่มีอยู่หรือไม่ Ocelot ทำงานร่วมกับ Thrust หรือไม่?
Kerrek SB

อื่น ๆ ที่ผ่านมารหัสที่มา GPU แมวป่าสามารถพบได้ผ่าน GitHub gtcasl / gpuocelot
l --marc l

36

คุณสามารถตรวจสอบโปรเจ็กต์ gpuocelotซึ่งเป็นอีมูเลเตอร์ที่แท้จริงในแง่ที่ว่า PTX (bytecode ซึ่งโค้ด CUDA ถูกแปลงเป็น) จะถูกจำลอง

นอกจากนี้ยังมีตัวแปล LLVM ซึ่งน่าสนใจที่จะทดสอบว่าเร็วกว่าเมื่อใช้ -deviceemu หรือไม่


ส่วนที่น่าเศร้าคือสำหรับ linux เท่านั้น ซึ่งในขณะที่ฉันเป็นผู้ใช้ linux โดยค่าเริ่มต้น การพัฒนาจำนวนเล็กน้อยที่ฉันทำคือบนเครื่อง windows -deviceemu เลิกใช้งานแล้วดังนั้นคำตอบของ jskaggz จึงไม่ค่อยพอดี ทั้งหมดนี้ดูเหมือนจะเป็นคำตอบที่ดีที่สุด
Narcolapser

14

ชุดเครื่องมือ CUDA มีอยู่ในตัวจนถึงรอบการเผยแพร่ CUDA 3.0 ฉันใช้ CUDA เวอร์ชันเก่ามากเหล่านี้อย่าลืมใช้ -deviceemu เมื่อคอมไพล์ด้วย nvcc


4
CUDA emulator เลิกใช้งานแล้วคุณน่าจะดีกว่าถ้ามองไปที่ gpuocelot
ทอม

1
นอกจากนี้ตัวจำลอง CUDA ยังใช้เธรด OS ดั้งเดิมหนึ่งเธรดต่อเธรด CUDA แบบลอจิคัลซึ่งไม่มีประสิทธิภาพอย่างมาก
Stringer

9

https://github.com/hughperkins/cuda-on-clช่วยให้คุณเรียกใช้โปรแกรมNVIDIA® CUDA ™บน OpenCL 1.2 GPUs (การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นผู้เขียน)


ฉันสามารถรันบน CPU ได้หรือไม่?
Mateusz Piotrowski

GPU เท่านั้น ต้องการ OpenCL 1.2 GPU หรือดีกว่า
Hugh Perkins

1
คุณสามารถเรียกใช้บน CPU โดยใช้jrprice.com/Oclgrindแต่ฉันเดาว่าอาจไม่ใช่สิ่งที่คุณหมายถึง ;-) ฉันเดาว่าผักชี (ชื่อใหม่) อาจทำงานบน CPU OpenCL ได้เช่นกัน แต่ฉันไม่เคยทดสอบสิ่งนี้ อาจต้องมีการแยงเล็กน้อย
Hugh Perkins

3

โปรดใช้ความระมัดระวังเมื่อคุณเขียนโปรแกรมโดยใช้ -deviceemu เนื่องจากมีการดำเนินการที่ nvcc จะยอมรับในขณะที่อยู่ในโหมดจำลอง แต่ไม่ใช่เมื่อทำงานบน GPU จริง ส่วนใหญ่จะพบในการโต้ตอบกับโฮสต์อุปกรณ์

และตามที่คุณได้กล่าวไว้เตรียมความพร้อมสำหรับการดำเนินการที่ช้า


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