Emulator GPU untuk pemrograman CUDA tanpa perangkat keras [ditutup]


111

Pertanyaan: Apakah ada emulator untuk kartu Geforce yang memungkinkan saya memprogram dan menguji CUDA tanpa memiliki perangkat keras sebenarnya?


Info:

Saya ingin mempercepat beberapa simulasi saya di CUDA, tetapi masalah saya adalah saya tidak selalu berada di sekitar desktop saya untuk melakukan pengembangan ini. Saya ingin melakukan beberapa pekerjaan pada netbook saya, tetapi netbook saya tidak memiliki GPU. Sejauh yang saya tahu, Anda membutuhkan GPU berkemampuan CUDA untuk menjalankan CUDA. Apakah ada cara untuk menyiasatinya? Sepertinya satu-satunya cara adalah emulator GPU (yang jelas akan sangat lambat, tetapi akan berfungsi). Tapi apapun cara untuk melakukan ini, saya ingin mendengar.

Saya memprogram di Ubuntu 10.04 LTS.


Jawaban:


39

Bagi mereka yang mencari jawabannya di tahun 2016 (dan bahkan 2017) ...


Penolakan

  • Saya telah gagal meniru GPU.
  • Ini mungkin bisa digunakan gpuocelotjika Anda memenuhi daftar dependensinya.

Saya sudah mencoba mendapatkan emulator untuk BunsenLabs (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU / Linux).

Saya akan memberi tahu Anda apa yang telah saya pelajari.


  1. nvccdulu memiliki -deviceemuopsi kembali di CUDA Toolkit 3.0

    Saya mengunduh CUDA Toolkit 3.0, menginstalnya dan mencoba menjalankan program sederhana:

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

    Perhatikan bahwa di CUDA Toolkit 3.0 nvccada di file /usr/local/cuda/bin/.

    Ternyata saya kesulitan menyusunnya:

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

    Saya telah menemukan di Internet bahwa jika saya menggunakan gcc-4.2atau sama kuno gcc-4.9.2, kesalahan mungkin hilang. Aku menyerah.


  2. gpuocelot

    Jawaban oleh Stringer memiliki tautan ke gpuocelotsitus web proyek yang sangat lama . Jadi pada awalnya saya mengira proyek itu ditinggalkan pada tahun 2012 atau lebih. Sebenarnya, itu ditinggalkan beberapa tahun kemudian.

    Berikut beberapa situs web terbaru:

    Saya mencoba menginstal gpuocelot dengan mengikuti panduan . Saya mengalami beberapa kesalahan selama instalasi dan saya menyerah lagi.gpuocelottidak lagi didukung dan bergantung pada kumpulan versi pustaka dan perangkat lunak yang sangat spesifik.

    Anda dapat mencoba mengikuti tutorial ini dari Juli 2015 tetapi saya tidak menjamin itu akan berhasil. Saya belum mengujinya.


  3. MCUDA

    Kerangka kerja terjemahan MCUDA adalah alat berbasis linux yang dirancang untuk secara efektif mengkompilasi model pemrograman CUDA ke arsitektur CPU.

    Mungkin berguna. Berikut ini tautan ke situs web .


  4. Limbah CUDA

    Ini adalah emulator untuk digunakan pada Windows 7 dan 8. Saya belum mencobanya. Tampaknya tidak dikembangkan lagi (komit terakhir tertanggal 4 Juli 2013).

    Berikut tautan ke situs web proyek: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    Pembaruan terakhir: 12.03.2017

    Seperti yang ditunjukkan oleh tanda hubung di komentar, CU2CL tampaknya menjadi proyek yang menarik. Tampaknya dapat menerjemahkan kode CUDA ke kode OpenCL. Jadi jika GPU Anda mampu menjalankan kode OpenCL maka proyek CU2CL mungkin menarik bagi Anda.

    Tautan:


4
Ini memalukan! Dengan tidak menyediakan jalur lambat, sangat sulit untuk membangun dan menguji aplikasi di sembarang mesin. Artinya, developer harus menghindari penambahan dependensi ke Cuda. Ini masih dapat digunakan oleh para penghobi dan peneliti, untuk proyek satu kali. Bukan untuk aplikasi nyata bagi pelanggan.
dashesy

3
CU2CL tampaknya aktif, dan layak untuk dilihat juga.
dashesy

1
1. nvcc -deviceemu
Nathan

2
4. mulai CUDA Wastebekerja
Nathan

2
5. mulai CU2CLbekerja
Nathan

41

Tanggapan ini mungkin terlambat, tetapi tetap perlu diperhatikan. GPU Ocelot ( di mana saya salah satu kontributor inti ) dapat dikompilasi tanpa driver perangkat CUDA (libcuda.so) diinstal jika Anda ingin menggunakan backend Emulator atau LLVM. Saya telah mendemonstrasikan emulator pada sistem tanpa GPU NVIDIA.

Emulator berupaya dengan setia menerapkan spesifikasi PTX 1.4 dan PTX 2.1 yang mungkin menyertakan fitur yang tidak didukung oleh GPU lama. Penerjemah LLVM mengupayakan terjemahan yang benar dan efisien dari PTX ke x86 yang diharapkan akan membuat CUDA cara yang efektif untuk memprogram CPU multicore serta GPU. -deviceemutelah menjadi fitur CUDA yang tidak digunakan lagi untuk beberapa waktu, tetapi penerjemah LLVM selalu lebih cepat.

Selain itu, beberapa pemeriksa kebenaran dibangun ke dalam emulator untuk memverifikasi: akses memori yang diselaraskan, akses ke memori bersama disinkronkan dengan benar, dan dereferensi memori global mengakses wilayah memori yang dialokasikan. Kami juga telah menerapkan debugger interaktif baris perintah yang sebagian besar terinspirasi oleh gdb ke langkah tunggal melalui kernel CUDA, menetapkan titik putus dan titik pengawasan, dll. Alat ini secara khusus dikembangkan untuk mempercepat debugging program CUDA; Anda mungkin menganggapnya berguna.

Maaf tentang aspek khusus Linux. Kami telah memulai cabang Windows ( serta port Mac OS X ) tetapi beban teknis sudah cukup besar untuk menekankan pengejaran penelitian kami. Jika ada yang punya waktu dan minat, mereka mungkin ingin membantu kami memberikan dukungan untuk Windows!

Semoga ini membantu.


3
Hai - kamu masih ada? Apakah ada dokumentasi tentang bagaimana seseorang membangun program dengan Ocelot pada lingkungan build CUDA yang ada? Juga, apakah Ocelot bekerja dengan Thrust?
Kerrek SB

Kode sumber GPU Ocelot yang lebih baru dapat ditemukan melalui GitHub gtcasl / gpuocelot .
l --marc l

36

Anda juga dapat memeriksa proyek gpuocelot yang merupakan emulator sejati dalam artian bahwa PTX (bytecode tempat kode CUDA dikonversi) akan diemulasi.

Ada juga penerjemah LLVM, akan menarik untuk diuji apakah lebih cepat daripada saat menggunakan -deviceemu.


Bagian yang menyedihkan adalah itu hanya untuk linux. Yang mana, sementara saya pengguna linux secara default. sebagian kecil pengembangan yang saya lakukan adalah pada mesin windows. -Deviceemu tidak digunakan lagi, jadi jawaban jskaggz kurang cocok. secara keseluruhan, ini tampaknya menjadi jawaban terbaik.
Narcolapser

14

Toolkit CUDA memiliki satu perangkat di dalamnya hingga siklus rilis CUDA 3.0. Jika Anda menggunakan salah satu versi CUDA yang sangat lama ini, pastikan untuk menggunakan -deviceemu saat mengompilasi dengan nvcc.


4
Emulator CUDA tidak digunakan lagi, Anda mungkin lebih baik melihat gpuocelot.
Tom

1
Selain itu, emulator CUDA menggunakan satu utas OS asli per utas CUDA logis yang sangat tidak efisien.
Stringer

9

https://github.com/hughperkins/cuda-on-cl memungkinkan Anda menjalankan program NVIDIA® CUDA ™ pada OpenCL 1.2 GPU (pengungkapan penuh: Saya penulisnya)


Bisakah saya menjalankannya di CPU juga?
Mateusz Piotrowski

GPU saja. Membutuhkan OpenCL 1.2 GPU, atau lebih baik.
Hugh Perkins

1
Anda mungkin dapat menjalankannya di CPU, menggunakan jrprice.com/Oclgrind , tetapi saya rasa itu mungkin bukan yang Anda maksud ;-). Saya kira Coriander (nama baru) mungkin bisa berjalan di CPU OpenCL juga, tapi saya belum pernah menguji ini. Mungkin perlu sedikit dorongan.
Hugh Perkins

3

Berhati-hatilah saat Anda memprogram menggunakan -deviceemu karena ada operasi yang akan diterima nvcc saat berada dalam mode emulasi, tetapi tidak saat benar-benar berjalan di GPU. Ini sebagian besar ditemukan dengan interaksi perangkat-host.

Dan seperti yang Anda sebutkan, bersiaplah untuk eksekusi yang lambat.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.