Эмулятор GPU для программирования CUDA без аппаратного обеспечения

Вопрос: Существует ли эмулятор для карты Geforce, который позволит мне программировать и тестировать CUDA без фактического оборудования?


Информация:

Я хочу ускорить несколько моих симуляций в CUDA, но моя проблема в том, что я не всегда вокруг своего рабочего стола для этого развития. Я хотел бы сделать некоторую работу над своим нетбуком, но у моего нетбука нет графического процессора. Теперь, насколько я знаю, для работы CUDA нужен графический процессор CUDA. Есть ли способ обойти это? Казалось бы, единственный способ – это эмулятор GPU (который, очевидно, будет болезненно медленным, но будет работать). Но каким бы способом это ни было, я хотел бы услышать.

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

Для тех, кто ищет ответ в 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  __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<<>>(); cudaDeviceSynchronize(); return 0; } 

    Обратите внимание, что в CUDA Toolkit 3.0 nvcc находился в 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 году или около того. Фактически, это было заброшено несколькими годами позже.

    Вот некоторые современные веб-сайты:

    • GitHub ;
    • Веб-сайт проекта ;
    • Руководство по установке .

    Я попытался установить gpuocelot после руководства . Во время установки у меня было несколько ошибок, и я снова сдался. gpuocelot больше не поддерживается и зависит от набора очень конкретных версий библиотек и программного обеспечения.

    Вы можете попытаться следовать этому руководству с июля 2015 года, но я не гарантирую, что он сработает. Я его не тестировал.


  3. MCUDA

    Механизм перевода MCUDA – это инструмент на основе Linux, предназначенный для эффективной компиляции модели программирования CUDA в архитектуру ЦП.

    Это может быть полезно. Вот ссылка на сайт .


  4. Отходы CUDA

    Это эмулятор для использования в Windows 7 и 8. Однако я его не пробовал. Похоже, что он больше не развивается (последний фиксат датирован 4 июля 2013 года).

    Вот ссылка на сайт проекта: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    Последнее обновление: 12.03.2017

    Как отмечает Dashy в комментариях, CU2CL кажется интересным проектом. Кажется, он способен перевести код CUDA в код OpenCL. Поэтому, если ваш GPU способен запускать OpenCL-код, проект CU2CL может вас заинтересовать.

    Ссылки:

    • Главная страница CU2CL
    • Репозиторий CU2CL GitHub

Этот ответ может быть слишком запоздалым, но все равно стоит его заметить. GPU Ocelot ( из которого я являюсь одним из основных участников ) может быть скомпилирован без использования драйверов устройств CUDA (libcuda.so), если вы хотите использовать бэкэнды Emulator или LLVM. Я продемонстрировал эмулятор на системах без графических процессоров NVIDIA.

Эмулятор пытается точно реализовать спецификации PTX 1.4 и PTX 2.1, которые могут включать функции более старых графических процессоров, которые не поддерживаются. Переводчик LLVM стремится к правильному и эффективному переводу с PTX на x86, что, мы надеемся, сделает CUDA эффективным способом программирования многоядерных процессоров, а также графических процессоров. -deviceemu была устаревшей особенностью CUDA в течение довольно долгого времени, но переводчик LLVM всегда был быстрее.

Кроме того, в эмулятор встроены несколько средств проверки правильности, чтобы проверить: согласованные обращения к памяти, обращения к общей памяти правильно синхронизированы, а разыменование глобальной памяти обращается к выделенным областям памяти. Мы также внедрили интерактивный отладчик командной строки, вдохновленный главным образом gdb на одноступенчатые ядра CUDA, установленные точки останова и точки наблюдения и т. Д. Эти инструменты были специально разработаны для ускорения отладки программ CUDA; вы можете найти их полезными.

Извините за аспект Linux-only. Мы запустили ветку Windows ( а также порт Mac OS X ), но техническая нагрузка уже достаточно велика, чтобы подчеркнуть наши исследовательские цели. Если у кого есть время и интерес, они могут помочь нам предоставить поддержку Windows!

Надеюсь это поможет.

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

Также есть переводчик LLVM, было бы интересно проверить, работает ли он быстрее, чем при использовании -deviceemu.

Набор инструментов CUDA был встроен в него до цикла выпуска CUDA 3.0. Я использую одну из этих очень старых версий CUDA, не забудьте использовать -deviceemu при компиляции с nvcc.

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

Будьте осторожны при программировании с помощью -deviceemu, так как есть операции, которые nvcc будет принимать во время эмуляции, но не при фактическом запуске на графическом процессоре. Это чаще всего встречается при взаимодействии устройства и хоста.

И, как вы упомянули, подготовьтесь к медленному исполнению.

  • «Ожидание выхода целевого устройства в онлайн» в Android Studio 2.3
  • Список устройств поддержки HCE?
  • Как работают эмуляторы и как они записываются?
  • Как получить знак, мантисса и показатель числа с плавающей запятой
  • Симулятор или эмулятор? В чем разница?
  • Как подключить эмулятор Android к ADB?
  • Давайте будем гением компьютера.