Эмулятор 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-это инструмент на базе linux, предназначенный для эффективно скомпилировать модель программирования CUDA в архитектуру процессора.
это может быть полезно. Вот это ссылка на сайт.
отходы CUDA
это эмулятор для использования в Windows 7 и 8. Я не пробовал. Кажется, это не так разработано больше (последний коммит датирован 4 июля 2013 года).
вот ссылка на сайт проекта:https://code.google.com/archive/p/cuda-waste/
этот ответ может быть слишком поздно, но это стоит отметить в любом случае. GPU Ocelot (из которых я являюсь одним из основных участников) может быть скомпилирован без драйверов устройств CUDA (libcuda.so) установлен, если вы хотите использовать эмулятор или LLVM backends. Я продемонстрировал эмулятор на системах без графических процессоров 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. Это в основном встречается при взаимодействии устройства с хостом.
и, как вы упомянули, приготовьтесь к медленному выполнению.
Comments