Эмулятор графического процессора для программирования CUDA без аппаратного обеспечения [закрыто]

111

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


Информация:

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

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

Наркозависимый
источник
Связано: с графическим процессором AMD: stackoverflow.com/questions/12828268/… , с интегрированной графикой Intel: stackoverflow.com/questions/8193242/can-i-run-cuda-on-intel
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ответы:

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

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

    Вот несколько актуальных веб-сайтов:

    Я попытался установить 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

    Как отметил Дашеси в комментариях, CU2CL кажется интересным проектом. Кажется, можно перевести код CUDA в код OpenCL. Так что, если ваш графический процессор способен запускать код OpenCL, то проект CU2CL может вас заинтересовать.

    Ссылки:

Матеуш Пиотровски
источник
4
Это стыд! Не обеспечивая медленный путь, очень сложно создавать и тестировать приложения на любой машине. Это означает, что разработчикам следует избегать добавления зависимостей к Cuda. Его до сих пор используют любители и исследователи для разовых проектов. Не для реальных приложений для клиентов.
dashesy
3
CU2CL кажется активным, и на него тоже стоит обратить внимание.
dashesy
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 эффективным способом программирования многоядерных процессоров, а также графических процессоров. -deviceemuдолгое время была устаревшей функцией CUDA, но переводчик LLVM всегда был быстрее.

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

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

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

судья
источник
3
Привет, ты еще здесь? Есть ли документация о том, как построить программу с помощью Ocelot в существующей среде сборки CUDA? Кроме того, Ocelot работает с Thrust?
Kerrek SB
Более свежий исходный код GPU Ocelot можно найти на GitHub gtcasl / gpuocelot .
l --marc l
36

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

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

Стрингер
источник
Печально то, что это только для Linux. Который, пока я по умолчанию пользуюсь Linux. небольшая часть разработки, которую я делаю, приходится на машины с Windows. -Deviceemu устарел, поэтому ответ jskaggz не совсем подходит. в целом, это, кажется, лучший ответ.
Narcolapser
14

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

Джубал
источник
4
Эмулятор CUDA устарел, вам, вероятно, лучше взглянуть на gpuocelot.
Tom
1
Плюс эмулятор CUDA использует один собственный поток ОС на логический поток CUDA, что ужасно неэффективно.
Stringer
9

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

Хью Перкинс
источник
Могу ли я запустить его и на CPU?
Mateusz Piotrowski
Только графический процессор. Требуется графический процессор OpenCL 1.2 или лучше.
Хью Перкинс
1
Вы, вероятно, можете запустить его на ЦП, используя jrprice.com/Oclgrind , но я думаю, что это не то, что вы имели в виду ;-). Я предполагаю, что Coriander (новое имя), вероятно, также может работать на CPU OpenCL, но я никогда не тестировал это. Может понадобиться немного подтолкнуть.
Хью Перкинс
3

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

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

Шон
источник
0

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

sriraj
источник