Donanım olmadan CUDA programlama için GPU Emülatörü [kapalı]


111

Soru: Geforce kartı için, gerçek donanıma sahip olmadan CUDA'yı programlamamı ve test etmemi sağlayacak bir emülatör var mı?


Bilgi:

CUDA'da birkaç simülasyonumu hızlandırmaya çalışıyorum, ancak benim sorunum bu geliştirmeyi yapmak için her zaman masaüstümün etrafında olmamam. Bunun yerine netbook'um üzerinde biraz çalışma yapmak istiyorum, ancak netbook'umun bir GPU'su yok. Şimdi bildiğim kadarıyla, CUDA'yı çalıştırmak için CUDA uyumlu bir GPU'ya ihtiyacınız var. Bunu aşmanın bir yolu var mı? Görünüşe göre tek yol bir GPU öykünücüsüdür (açıkçası acı verici bir şekilde yavaş olacak, ancak işe yarayacak). Ama bunu yapmanın yolu ne olursa olsun duymak isterim.

Ubuntu 10.04 LTS'de programlama yapıyorum.


Yanıtlar:


39

Cevabı 2016'da (hatta 2017'de) arayanlar için ...


feragat

  • Sonuçta GPU'yu taklit edemedim.
  • gpuocelotBağımlılıklar listesini tatmin ederseniz kullanmak mümkün olabilir .

BunsenLabs için bir emülatör edinmeye çalıştım (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU / Linux).

Sana ne öğrendiğimi söyleyeceğim.


  1. nvcc-deviceemueskiden CUDA Toolkit 3.0'da bir seçeneğe sahipti

    CUDA Toolkit 3.0'ı indirdim, yükledim ve basit bir program çalıştırmayı denedim:

    #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 içinde Toolkit 3.0 unutmayın nvccoldu /usr/local/cuda/bin/.

    Derlemekte zorlandığım ortaya çıktı:

    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".
    

    İnternette buldum ki , hatalar gcc-4.2yerine eskiden kullanırsam veya benzer şekilde eskiyse gcc-4.9.2kaybolabilir. Pes ettim.


  2. gpuocelot

    Stringer'ın cevabının çok eski bir gpuocelotproje web sitesine bağlantısı var. İlk başta projenin 2012'de terk edildiğini düşündüm. Aslında birkaç yıl sonra terk edildi.

    İşte bazı güncel web siteleri:

    Aşağıdaki gpuocelot yüklemeye çalıştı rehber . Yine de kurulum sırasında birkaç hatam oldu ve yine pes ettim. gpuocelotartık desteklenmemektedir ve bir dizi çok özel kitaplık ve yazılım sürümüne bağlıdır.

    Bu öğreticiyi Temmuz 2015'ten itibaren izlemeyi deneyebilirsiniz , ancak işe yarayacağını garanti etmiyorum. Ben test etmedim.


  3. MCUDA

    MCUDA çeviri çerçevesi, CUDA programlama modelini bir CPU mimarisine etkili bir şekilde derlemek için tasarlanmış linux tabanlı bir araçtır.

    Faydalı olabilir. İşte web sitesine bir bağlantı .


  4. CUDA Atıkları

    Windows 7 ve 8'de kullanmak için bir emülatördür. Yine de denemedim. Artık geliştirilmiyor gibi görünüyor (son taahhüt 4 Temmuz 2013 tarihlidir).

    İşte projenin web sitesine bağlantı: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    Son güncelleme: 12.03.2017

    As dashesy Açıklamalarda belirttiği, CU2CL ilginç bir projeye benziyor. CUDA kodunu OpenCL koduna çevirebilecek gibi görünüyor . Dolayısıyla, GPU'nuz OpenCL kodunu çalıştırabiliyorsa, CU2CL projesi ilginizi çekebilir.

    Bağlantılar:


4
Bu bir utanç! Yavaş bir yol sağlamayarak, uygulamaları herhangi bir makinede oluşturmak ve test etmek çok zordur. Bu, geliştiricilerin Cuda'ya bağımlılık eklemekten kaçınması gerektiği anlamına gelir. Hobi sahipleri ve araştırmacılar tarafından bir defaya mahsus projeler için hala kullanılabilir. Müşteriler için gerçek uygulamalar için değil.
çizgi

3
CU2CL aktif görünüyor ve ayrıca bakmaya değer.
kısa

1
1. nvcc -deviceemu
Nathan

2
4. CUDA Wasteçalışmaya
Nathan

2
5. CU2CLçalışmaya
Nathan

41

Bu yanıt çok geç olabilir, ancak yine de kayda değer. Emulator veya LLVM arka uçlarını kullanmak istiyorsanız, GPU Ocelot ( ki bunlardan biri benim ) CUDA aygıt sürücüleri (libcuda.so) kurulmadan derlenebilir. Öykünücüyü NVIDIA GPU'ları olmayan sistemlerde gösterdim.

Emülatör, eski GPU'ların desteklemediği özellikleri içerebilen PTX 1.4 ve PTX 2.1 spesifikasyonlarını aslına sadık bir şekilde uygulamaya çalışır. LLVM tercümanı, PTX'ten x86'ya doğru ve verimli çeviri için çabalar; bu, CUDA'yı çok çekirdekli CPU'ları ve GPU'ları programlamanın etkili bir yolu haline getirecektir. -deviceemubir süredir CUDA'nın kullanımdan kaldırılan bir özelliği olmuştur, ancak LLVM tercümanı her zaman daha hızlı olmuştur.

Ek olarak, doğrulamak için öykünücüye birkaç doğruluk denetleyicisi yerleştirilmiştir: hizalanmış bellek erişimleri, paylaşılan belleğe erişimler düzgün bir şekilde senkronize edilir ve küresel bellek başvurusu, bellek ayrılmış bölgelerine erişim sağlar. Ayrıca, büyük ölçüde gdb'den esinlenerek CUDA çekirdekleriyle tek adımlı bir komut satırı etkileşimli hata ayıklayıcı uyguladık, kesme noktaları ve izleme noktaları vb. Bu araçlar, CUDA programlarının hata ayıklamasını hızlandırmak için özel olarak geliştirilmiştir; onları yararlı bulabilirsin.

Yalnızca Linux yönü için özür dilerim. Bir Windows şubesi ( ve bir Mac OS X bağlantı noktası ) başlattık, ancak mühendislik yükü, araştırma arayışlarımızı vurgulayacak kadar büyük. Herhangi birinin zamanı ve ilgisi varsa, Windows için destek sağlamamıza yardımcı olmak isteyebilirler!

Bu yardımcı olur umarım.


3
Merhaba - hala buralarda mısın? Mevcut bir CUDA oluşturma ortamında Ocelot ile bir programın nasıl oluşturulduğuna dair herhangi bir belge var mı? Ayrıca Ocelot, Thrust ile çalışıyor mu?
Kerrek SB

Daha yeni GPU Ocelot kaynak kodu GitHub gtcasl / gpuocelot aracılığıyla bulunabilir .
l --marc l

36

PTX'in (CUDA kodunun dönüştürüldüğü bayt kodu) taklit edileceği anlamında gerçek bir öykünücü olan gpuocelot projesini de kontrol edebilirsiniz .

Bir de LLVM tercümanı var, -deviceemu kullanırken olduğundan daha hızlı olup olmadığını test etmek ilginç olurdu.


Üzücü olan kısım, bu sadece linux içindir. Ki, ben varsayılan olarak bir linux kullanıcısıyken. Yaptığım geliştirmenin küçük bir kısmı Windows makinelerinde. -Deviceemu kullanımdan kaldırıldı, bu nedenle jskaggz yanıtı tam olarak uymuyor. her şeyden öte, bu en iyi cevap gibi görünüyor.
Narcolapser

14

CUDA araç vardı bir CUDA 3.0 sürüm döngüsüne kadar içine inşa etti. CUDA'nın bu çok eski sürümlerinden birini kullanıyorsam, nvcc ile derlerken -deviceemu kullandığınızdan emin olun.


4
CUDA emülatörü kullanımdan kaldırıldı, muhtemelen gpuocelot'a bakmanız daha iyi.
Tom

1
Ayrıca CUDA emülatörü, son derece verimsiz olan mantıksal CUDA iş parçacığı başına bir yerel işletim sistemi iş parçacığı kullanır.
Stringer

9

https://github.com/hughperkins/cuda-on-cl , OpenCL 1.2 GPU'larda NVIDIA® CUDA ™ programlarını çalıştırmanıza olanak tanır (tam açıklama: Yazar benim)


Bunu bir CPU üzerinde de çalıştırabilir miyim?
Mateusz Piotrowski

Yalnızca GPU. OpenCL 1.2 GPU veya daha iyisine ihtiyaç duyar.
Hugh Perkins

1
Bunu muhtemelen jrprice.com/Oclgrind kullanarak CPU üzerinde çalıştırabilirsiniz , ama sanırım kastettiğin muhtemelen bu değildi ;-). Sanırım Coriander (yeni isim) muhtemelen CPU OpenCL'de de çalışabilir, ancak bunu hiç test etmedim. Biraz dürtmeye ihtiyacım olabilir.
Hugh Perkins

3

-Deviceemu kullanarak programlama yaparken dikkatli olun çünkü nvcc'nin öykünme modundayken kabul edeceği ancak aslında bir GPU'da çalışırken kabul etmediği işlemler vardır. Bu, çoğunlukla cihaz-ana bilgisayar etkileşiminde bulunur.

Ve bahsettiğiniz gibi, yavaş bir uygulamaya hazırlanın.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.