Емулятор GPU для програмування CUDA без обладнання [закрито]


111

Питання: Чи є емулятор для карти Geforce, який би дозволив мені програмувати та тестувати CUDA, не маючи власне обладнання?


Інформація:

Я прагну прискорити кілька моделей моєї роботи в CUDA, але моя проблема полягає в тому, що я не завжди навколо свого робочого столу, щоб зробити цю розробку. Я хотів би замість цього зробити якусь роботу над своєю нетбуком, але мій нетбук не має GPU. Наскільки я знаю, вам потрібен графічний процесор, здатний на CUDA, щоб запустити CUDA. Чи є спосіб обійти це? Здавалося б, єдиний спосіб - це емулятор GPU (який, очевидно, буде болісно повільним, але працює). Але як би там не було, я хотів би почути.

Я програмую на Ubuntu 10.04 LTS.


Відповіді:


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використовувався -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веб-сайт проекту. Тож спочатку я подумав, що проект відмовились у 2012 році. Насправді від неї було відмовлено через кілька років.

    Ось кілька сучасних веб-сайтів:

    Я спробував встановити gpuocelot слідуючи керівництву . У мене під час встановлення було декілька помилок, і я знову відмовився. gpuocelotбільше не підтримується і залежить від набору дуже специфічних версій бібліотек та програмного забезпечення.

    Ви можете спробувати дотримуватися цього підручника з липня 2015 року, але я не гарантую, що він спрацює. Я його не перевіряв.


  3. MCUDA

    Структура перекладу MCUDA - це інструмент на основі Linux, призначений для ефективної компіляції моделі програмування CUDA в архітектуру процесора.

    Це може бути корисним. Ось посилання на веб-сайт .


  4. КУДА Відходи

    Це емулятор, який можна використовувати в Windows 7 та 8. Я не пробував цього. Схоже, це вже не розроблено (остання комісія датована 4 липня 2013 року).

    Ось посилання на веб-сайт проекту: 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), якщо ви бажаєте використовувати емулятор або LLVM. Я продемонстрував емулятор в системах без графічних процесорів NVIDIA.

Емулятор намагається сумлінно реалізувати специфікації PTX 1.4 та PTX 2.1, які можуть включати функції старих графічних процесорів, які не підтримують. Перекладач LLVM прагне правильного та ефективного перекладу з PTX на x86, що, сподіваємось, зробить CUDA ефективним способом програмування багатоядерних процесорів, а також GPU. -deviceemuбула застарілою особливістю CUDA протягом досить тривалого часу, але перекладач LLVM завжди був швидшим.

Крім того, в емулятор вбудовано кілька перевірок на правильність: вирівнювання доступу до пам’яті, доступу до спільної пам'яті належним чином синхронізовано та глобального доступу до перенаправлення пам’яті, виділених областям пам’яті. Ми також реалізували інтерактивний відладчик командного рядка, натхненний значною мірою gdb для однокрокового переходу через ядра CUDA, встановлення точок перериву та точок спостереження тощо. Ці інструменти були спеціально розроблені для прискорення налагодження програм CUDA; ви можете вважати їх корисними.

Вибачте за аспект лише для Linux. Ми створили відділення Windows ( як і порт Mac OS X ), але інженерний тягар вже досить великий, щоб підкреслити наші дослідницькі пошуки. Якщо у когось є якийсь час та інтерес, він, можливо, захоче допомогти нам забезпечити підтримку Windows!

Сподіваюся, це допомагає.


3
Привіт - ти все ще поруч? Чи є документація про те, як можна створити програму з Ocelot на існуючому середовищі побудови CUDA? Також Оцелот працює з тягою?
Керрек СБ

Більш свіжий вихідний код GPU Ocelot можна знайти за допомогою GitHub gtcasl / gpuocelot .
l --marc l

36

Ви також можете перевірити проект gpuocelot, який є справжнім емулятором, в тому сенсі, що PTX (байт-код, в який перетворений код CUDA) буде імітуватися.

Також є перекладач LLVM, було б цікаво перевірити, чи швидше це, ніж при використанні -deviceemu.


Сумна частина полягає лише в тому, що для Linux. Що, хоча я за замовчуванням я користувач Linux. невелика кількість розробки, яку я роблю, - це на машинах Windows. The -deviceemu було застарілим, тому відповідь jskaggz не зовсім відповідає. Зрештою, це здається найкращою відповіддю.
Нарколапсер

14

Набір інструментів CUDA мав вбудований до циклу випуску CUDA 3.0. Я використовую одну з цих дуже старих версій CUDA, обов'язково використовуйте -deviceemu при компіляції з nvcc.


4
Емулятор CUDA застарілий, ви, мабуть, краще дивитесь на gpuocelot.
Том

1
Плюс емулятор CUDA використовує один нативний потік ОС на логічний потік CUDA, що дуже неефективно.
Стрингер

9

https://github.com/hughperkins/cuda-on-cl дозволяє запускати програми NVIDIA® CUDA ™ на графічних процесорах OpenCL 1.2 (повне розкриття: я автор)


Чи можна також запустити його на процесорі?
Матеуш Піотровський

Тільки GPU. Потребує OpenCL 1.2 GPU або вище.
Х'ю Перкінс

1
Ви, ймовірно, можете запустити його на процесорі, використовуючи jrprice.com/Oclgrind , але я думаю, що, мабуть, не те, що ви мали на увазі ;-). Я думаю, Coriander (нове ім'я), ймовірно, може працювати і на CPU OpenCL, але я ніколи цього не перевіряв. Можливо, потрібно трохи висунути.
Х'ю Перкінс

3

Будьте уважні, коли ви програмуєте за допомогою -deviceemu, оскільки існують операції, які nvcc буде приймати, перебуваючи в режимі емуляції, але не тоді, коли насправді працює на графічному процесорі. Здебільшого це виявляється при взаємодії пристрій-хост.

І як ви вже згадували, готуйтеся до деякого повільного виконання.


0

GPGPU-Sim - це симулятор GPU, який може запускати програми CUDA без використання GPU. Я створив зображення докера з встановленим для себе GPGPU-Sim, якщо це корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.