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

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


информация:

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

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

Ответ 1

Для тех, кто ищет ответ в 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).

Я расскажу вам, что я узнал.


  • 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, ошибки могли исчезнуть. Я сдался.


  • gpuocelot

    В ответ Stringer есть ссылка на очень старый веб-сайт проекта gpuocelot. Поэтому сначала я подумал, что проект был оставлен в 2012 году или около того. Фактически, это было заброшено несколькими годами позже.

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

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

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


  • MCUDA

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

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


  • Отходы CUDA

    Это эмулятор для использования в 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 может вас заинтересовать.

    Ссылки:

Ответ 2

Этот ответ может быть слишком запоздалым, но это все равно стоит. 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!

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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