Эмулятор GPU для программирования CUDA без аппаратного обеспечения
вопрос: есть ли эмулятор для карты Geforce, который позволит мне программировать и тестировать CUDA без фактического оборудования?
Info:
Я ищу, чтобы ускорить несколько симуляций моего в CUDA, но моя проблема в том, что я не всегда вокруг моего рабочего стола для этой разработки. Вместо этого я хотел бы поработать над своим нетбуком, но у моего нетбука нет GPU. Теперь, насколько я знаю, вам нужен CUDA способный GPU для запуска CUDA. Есть способ обойти это? Казалось бы, единственный способ-это эмулятор GPU (который, очевидно, будет болезненно медленным, но будет работать). Но как бы это ни было, я хотел бы услышать.
я программирую на Ubuntu 10.04 LTS.
6 ответов
для тех, кто ищет ответ в 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
ответ стрингера имеет ссылку на очень старый
gpuocelot
сайт проекта. Поэтому сначала я подумал, что проект был заброшен в 2012 году или около того. На самом деле, он был заброшен несколько лет.вот некоторые современные веб-сайты:
я попытался установить gpuocelot после руководство. У меня было несколько ошибок во время установки, хотя, и я снова сдался.
gpuocelot
больше не поддерживается и зависит от набора весьма конкретных версий библиотек и программного обеспечения.вы можете попытаться следовать в этом уроке с июля 2015, но я не гарантирую, что это сработает. Я не проверял он.
-
MCUDA
mcuda translation framework-это инструмент на базе linux, предназначенный для эффективно компилируйте модель программирования CUDA в архитектуру CPU.
это может быть полезно. Вот ссылка на сайт.
-
CUDA отходы
это эмулятор для использования в Windows 7 и 8. Я не пробовал. Это, кажется, не быть разработано больше (последний коммит датирован 4 июля 2013 года).
вот ссылка на сайт проекта:https://code.google.com/archive/p/cuda-waste/
этот ответ может быть слишком поздно, но это стоит отметить в любом случае. GPU Ocelot (из которых я являюсь одним из основных участников) может быть скомпилирован без драйверов устройств CUDA (libcuda.so) установлен, если вы хотите использовать эмулятор или бэкэнды LLVM. Я продемонстрировал эмулятор на системах без графических процессоров NVIDIA.
эмулятор пытается добросовестно реализовать спецификации PTX 1.4 и PTX 2.1, которые могут включать функции, которые не поддерживают старые графические процессоры. Этот LLVM translator стремится к правильному и эффективному переводу с PTX на x86, что, надеюсь, сделает CUDA эффективным способом программирования многоядерных процессоров, а также графических процессоров. -deviceemu
была устаревшей особенностью CUDA в течение некоторого времени, но переводчик LLVM всегда был быстрее.
кроме того, в эмулятор встроено несколько проверок правильности: выровненные обращения к памяти, правильно синхронизированы обращения к общей памяти и разыменование глобальной памяти обращается к выделенным областям памяти. Мы также реализовали интерактивный отладчик командной строки вдохновленный в основном gdb для одношагового через ядра CUDA, установить точки останова и точки наблюдения и т.д... Эти инструменты были специально разработаны для ускорения отладки программ CUDA; вы можете найти их полезными.
извините за аспект только для Linux. Мы запустили ветку Windows (а также порт Mac OS X) но инженерная нагрузка уже достаточно большой, чтобы подчеркнуть наши исследования. Если у кого есть время и интерес, они могут помочь нам обеспечить поддержку для Windows!
надеюсь, что это помогает.
- [1]: GPU Ocelot -https://code.google.com/archive/p/gpuocelot/
- [2]: Интерактивный Отладчик Ocelot -http://forums.nvidia.com/index.php?showtopic=174820
вы можете проверить тоже gpuocelot проект, который является истинным эмулятором в том смысле, что PTX (байт-код, в который преобразуется код CUDA) будет эмулироваться.
есть также переводчик LLVM, было бы интересно проверить, если это быстрее, чем при использовании-deviceemu.
инструментарий CUDA had один встроенный в него до цикла выпуска CUDA 3.0. Я использую одну из этих очень старых версий CUDA, обязательно используйте-deviceemu при компиляции с nvcc.
https://github.com/hughperkins/cuda-on-cl позволяет запускать программы NVIDIA® CUDA™ на графических процессорах OpenCL 1.2 (полное раскрытие: я автор)
будьте осторожны при программировании с помощью-deviceemu, поскольку есть операции, которые nvcc будет принимать в режиме эмуляции, но не при фактическом запуске на GPU. Это в основном встречается при взаимодействии устройства и Хоста.
и, как вы упомянули, приготовьтесь к медленному выполнению.