Эмулятор 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/
-
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 на случай, если это будет полезно.