हार्डवेयर के बिना CUDA प्रोग्रामिंग के लिए GPU एमुलेटर [बंद]


111

प्रश्न: क्या एक Geforce कार्ड के लिए एक एमुलेटर है जो मुझे वास्तविक हार्डवेयर के बिना CUDA को प्रोग्राम और टेस्ट करने की अनुमति देगा?


जानकारी:

मैं CUDA में मेरे कुछ सिमुलेशन को गति देना चाहता हूं, लेकिन मेरी समस्या यह है कि मैं इस विकास को करने के लिए अपने डेस्कटॉप के आसपास नहीं हूं। मैं इसके बजाय अपनी नेटबुक पर कुछ काम करना चाहूंगा, लेकिन मेरी नेटबुक में GPU नहीं है। अब जहां तक ​​मुझे पता है, आपको CUDA चलाने के लिए CUDA सक्षम GPU की आवश्यकता है। क्या इस से निकाल पाने के लिए कोई तरीका है? ऐसा लगता है कि एकमात्र तरीका एक GPU एमुलेटर है (जो स्पष्ट रूप से दर्दनाक रूप से धीमा होगा, लेकिन काम करेगा)। लेकिन ऐसा करने के लिए जो भी तरीका है मैं सुनना चाहूंगा।

मैं Ubuntu 10.04 LTS पर प्रोग्रामिंग कर रहा हूं।


संबंधित: AMD GPU के साथ: stackoverflow.com/questions/12828268/… , इंटेल एकीकृत ग्राफिक्स पर: stackoverflow.com/questions/8193242/can-i-run-cuda-on-intel
Ciroillilli::::::

जवाबों:


39

2016 (और यहां तक ​​कि 2017) में जवाब मांगने वालों के लिए ...


अस्वीकरण

  • मैं सब के बाद 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एक किया करते थे -deviceemuCUDA टूलकिट 3.0 में विकल्प वापस

    मैंने CUDA टूलकिट 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 टूलकिट 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

    स्ट्रिंगर के उत्तर में एक बहुत पुरानी gpuocelotपरियोजना वेबसाइट का लिंक है । इसलिए सबसे पहले मैंने सोचा था कि परियोजना को 2012 या उसके बाद छोड़ दिया गया था। दरअसल, कुछ साल बाद इसे छोड़ दिया गया था।

    यहाँ कुछ अप टू डेट वेबसाइट्स हैं:

    मैंने गाइड के बाद gpuocelot स्थापित करने का प्रयास किया । हालांकि स्थापना के दौरान मेरी कई त्रुटियां थीं और मैंने फिर से हार मान ली। gpuocelotअब समर्थित नहीं है और पुस्तकालयों और सॉफ़्टवेयर के बहुत विशिष्ट संस्करणों के एक सेट पर निर्भर करता है।

    आप जुलाई, 2015 से इस ट्यूटोरियल का अनुसरण करने की कोशिश कर सकते हैं , लेकिन मैं गारंटी नहीं देता कि यह काम करेगा। मैंने इसका परीक्षण नहीं किया है।


  3. MCUDA

    MCUDA अनुवाद ढांचा एक लिनक्स आधारित उपकरण है जो CUDA प्रोग्रामिंग मॉडल को सीपीयू वास्तुकला के प्रभावी ढंग से संकलन के लिए बनाया गया है।

    यह उपयोगी हो सकता है। यहां वेबसाइट का लिंक दिया गया है


  4. CUDA अपशिष्ट

    यह विंडोज 7 और 8 पर उपयोग करने के लिए एक एमुलेटर है। हालांकि मैंने इसे आजमाया नहीं है। यह अब विकसित नहीं लगता है (अंतिम प्रतिबद्ध जुलाई 4, 2013 को दिनांकित है)।

    यहां प्रोजेक्ट की वेबसाइट का लिंक दिया गया है: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    अंतिम अपडेट: 12.03.2017

    जैसा कि डैशी ने टिप्पणियों में बताया, CU2CL एक दिलचस्प परियोजना है। यह CUDA कोड को OpenCL कोड में अनुवाद करने में सक्षम प्रतीत होता है । इसलिए यदि आपका GPU OpenCL कोड चलाने में सक्षम है, तो CU2CL प्रोजेक्ट आपकी रुचि का हो सकता है।

    लिंक:


4
यह शर्मनाक है! धीमी-पथ प्रदान नहीं करने से किसी भी मशीन पर अनुप्रयोगों का निर्माण और परीक्षण करना बहुत मुश्किल है। इसका मतलब है, डेवलपर्स को क्यूडा पर निर्भरता जोड़ने से बचना चाहिए। यह अभी भी शौकीनों और शोधकर्ताओं द्वारा, एक-बंद परियोजनाओं के लिए उपयोग करने योग्य है। ग्राहकों के लिए वास्तविक अनुप्रयोगों के लिए नहीं।
10

3
CU2CL सक्रिय प्रतीत होता है, और देखने लायक भी है।
द्वादशी

1
1. nvcc -deviceemu
नाथन

2
4. CUDA Wasteकाम कर रहे हैं
नाथन

2
5. CU2CLकाम कर रहे हैं
नाथन

41

यह प्रतिक्रिया बहुत देर हो सकती है, लेकिन यह वैसे भी ध्यान देने योग्य है। GPU Ocelot ( जिनमें से मैं कोर योगदानकर्ताओं में से एक हूं ) को CUDA डिवाइस ड्राइवर (libcuda.so) के बिना संकलित किया जा सकता है यदि आप एमुलेटर या LLVM बैकेंड का उपयोग करना चाहते हैं। मैंने NVIDIA GPU के बिना सिस्टम पर एमुलेटर का प्रदर्शन किया है।

एमुलेटर पीटीएक्स 1.4 और पीटीएक्स 2.1 विनिर्देशों को ईमानदारी से लागू करने का प्रयास करता है जिसमें पुरानी जीपीयू का समर्थन नहीं करने वाली विशेषताएं शामिल हो सकती हैं। LLVM अनुवादक सही और कुशल अनुवाद के लिए PTX से x86 तक प्रयास करता है जो CUDA को प्रोग्रामिंग मल्टीकोर सीपीयू और साथ ही GPU का एक प्रभावी तरीका बना देगा। -deviceemuकुछ समय के लिए CUDA की पदावनत विशेषता रही है, लेकिन LLVM अनुवादक हमेशा तेज रहा है।

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

लिनक्स-केवल पहलू के बारे में क्षमा करें। हमने एक विंडोज शाखा ( साथ ही एक मैक ओएस एक्स पोर्ट ) शुरू किया है, लेकिन इंजीनियरिंग बोझ पहले से ही काफी बड़ा है जो हमारे शोध को आगे बढ़ाता है। यदि किसी के पास कोई समय और रुचि है, तो वे हमें विंडोज के लिए सहायता प्रदान करने में मदद करना चाहते हैं!

उम्मीद है की यह मदद करेगा।


3
हाय - क्या तुम अभी भी आसपास हो? क्या कोई दस्तावेज है कि कैसे एक मौजूदा CUDA निर्माण पर्यावरण पर Ocelot के साथ एक कार्यक्रम बनाता है? इसके अलावा, Ocelot जोर के साथ काम करता है?
केरेक एसबी

GitHub gtcasl / gpuocelot के माध्यम से अधिक हाल ही में GPU Ocelot स्रोत कोड पाया जा सकता है ।
l --marc l

36

आप gpuocelot प्रोजेक्ट की भी जांच कर सकते हैं, जो इस अर्थ में एक सच्चा एमुलेटर है कि PTX ( ब्यूकोड जिसमें CUDA कोड परिवर्तित है) का अनुकरण किया जाएगा।

एक एलएलवीएम अनुवादक भी है, यह परीक्षण करने के लिए दिलचस्प होगा कि क्या यह प्रयोग करने की तुलना में अधिक तेज़ है जब -deviceemu।


दुख की बात यह है कि यह केवल लिनक्स के लिए है। जबकि, मैं डिफ़ॉल्ट रूप से एक लिनक्स उपयोगकर्ता हूं। विकास की एक छोटी राशि मैं खिड़कियों मशीनों पर है। -दिविसेमु को पदावनत कर दिया गया था, इसलिए jskaggz का उत्तर बिल्कुल फिट नहीं है। इस पर, यह सबसे अच्छा जवाब लगता है।
नारकोलापसर

14

CUDA 3.0 रिलीज़ होने तक CUDA टूलकिट ने इसे बनाया था । मैं आपको CUDA के इन बहुत पुराने संस्करणों में से एक का उपयोग करता हूं, nvcc के साथ संकलन करते समय -deviceemu का उपयोग करना सुनिश्चित करें।


4
CUDA एमुलेटर पदावनत है, आप शायद gpuocelot देखने से बेहतर हैं।
टॉम

1
प्लस CUDA एम्यूलेटर प्रति तार्किक CUDA थ्रेड प्रति एक मूल OS थ्रेड का उपयोग करता है जो बहुत ही अक्षम है।
स्ट्रिंग

9

https://github.com/hughperkins/cuda-on-cl आपको OpenCL 1.2 GPU पर NVIDIA® CUDA ™ कार्यक्रम चलाने देता है (पूर्ण प्रकटीकरण: मैं लेखक हूं)


क्या मैं इसे सीपीयू पर भी चला सकता हूं?
माट्यूज़ पिओत्रोस्की

केवल GPU। OpenCL 1.2 GPU की आवश्यकता है, या बेहतर।
ह्यूग पर्किंस

1
आप शायद सीपीआर पर इसे चला सकते हैं, jrprice.com/Oclgrind का उपयोग कर सकते हैं , लेकिन मुझे लगता है कि शायद आप क्या मतलब नहीं है ;-)। मुझे लगता है कि धनिया (नया नाम) शायद सीपीयू ओपनसीएल पर भी चल सकता है, लेकिन मैंने कभी इसका परीक्षण नहीं किया है। थोड़ा ठेस लगने की जरूरत हो सकती है।
ह्यूग पर्किंस

3

जब आप -deviceemu का उपयोग करते हुए प्रोग्रामिंग कर रहे हों तो सावधान रहें क्योंकि ऐसे ऑपरेशन हैं जो nvcc को एमुलेशन मोड में स्वीकार करेंगे लेकिन वास्तव में GPU पर चलने पर नहीं। यह ज्यादातर डिवाइस-होस्ट इंटरैक्शन के साथ पाया जाता है।

और जैसा कि आपने उल्लेख किया है, कुछ धीमी गति से निष्पादन के लिए तैयार करें।


0

GPGPU-सिम एक GPU सिम्युलेटर है जो GPU का उपयोग किए बिना CUDA प्रोग्राम चला सकता है। मैंने GPGPU-Sim के साथ एक डॉकटर इमेज बनाई जो कि मददगार है।

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