Эмулятор 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).

я скажу вам, что у меня есть эрудированный.


  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 translation framework-это инструмент на базе linux, предназначенный для эффективно компилируйте модель программирования CUDA в архитектуру CPU.

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


  4. CUDA отходы

    это эмулятор для использования в Windows 7 и 8. Я не пробовал. Это, кажется, не быть разработано больше (последний коммит датирован 4 июля 2013 года).

    вот ссылка на сайт проекта:https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    последнее обновление: 12.03.2017

    As dashesy указано в комментариях, CU2CL кажется, интересный проект. Кажется, он способен перевести код CUDA для кода OpenCL. Поэтому, если ваш GPU способен запускать код OpenCL, то проект CU2CL может быть вам интересен.

    ссылки:


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

надеюсь, что это помогает.


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

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