Эмулятор GPU для программирования CUDA без аппаратного обеспечения



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





Info:



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



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

1533   6  

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

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


  4. отходы CUDA

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

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


  1. CU2CL

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

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

    ссылки:

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

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

вы можете проверить тоже 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

    Ничего не найдено.