Pergunta: Existe um emulador para uma placa Geforce que me permita programar e testar o CUDA sem ter o hardware real?
Info:
Estou tentando acelerar algumas simulações minhas em CUDA, mas meu problema é que nem sempre estou perto do meu desktop para fazer esse desenvolvimento. Eu gostaria de fazer algum trabalho no meu netbook, mas meu netbook não tem uma GPU. Até onde eu sei, você precisa de uma GPU com capacidade CUDA para executar o CUDA. Existe alguma forma de contornar isto? Parece que a única maneira é um emulador de GPU (que obviamente seria dolorosamente lento, mas funcionaria). Mas seja qual for a maneira de fazer isso, eu gostaria de ouvir.
Estou programando no Ubuntu 10.04 LTS.
Respostas:
Para quem busca a resposta em 2016 (e até 2017) ...
aviso Legal
gpuocelot
se você satisfizer sua lista de dependências.Tentei obter um emulador para BunsenLabs (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU / Linux).
Vou te contar o que aprendi.
nvcc
costumava ter uma-deviceemu
opção no CUDA Toolkit 3.0Baixei o CUDA Toolkit 3.0, instalei-o e tentei executar um programa simples:
Observe que no CUDA Toolkit 3.0
nvcc
estava no/usr/local/cuda/bin/
.Descobri que tive dificuldades em compilá-lo:
Descobri na Internet que se eu usar
gcc-4.2
ou similarmente antigo,gcc-4.9.2
os erros podem desaparecer. Eu desisto.gpuocelot
A resposta de Stringer tem um link para um
gpuocelot
site de projeto muito antigo . Então, no início, pensei que o projeto estava abandonado em 2012 ou assim. Na verdade, foi abandonado alguns anos depois.Aqui estão alguns sites atualizados:
Tentei instalar o gpuocelot seguindo o guia . No entanto, tive vários erros durante a instalação e desisti novamente.
gpuocelot
não é mais compatível e depende de um conjunto de versões muito específicas de bibliotecas e software.Você pode tentar seguir este tutorial a partir de julho de 2015, mas não garanto que funcionará. Eu não testei.
MCUDA
Pode ser útil. Aqui está um link para o site .
Resíduos CUDA
É um emulador para usar no Windows 7 e 8. Ainda não tentei. Parece que não está mais sendo desenvolvido (o último commit é de 4 de julho de 2013).
Aqui está o link para o site do projeto: https://code.google.com/archive/p/cuda-waste/
CU2CL
Última atualização: 03/12/2017
Como ashesy apontou nos comentários, CU2CL parece ser um projeto interessante. Parece ser capaz de traduzir o código CUDA em código OpenCL. Portanto, se sua GPU é capaz de executar código OpenCL, o projeto CU2CL pode ser do seu interesse.
Links:
fonte
nvcc -deviceemu
CUDA Waste
trabalharCU2CL
trabalharEsta resposta pode ser tarde demais, mas vale a pena notar de qualquer maneira. O GPU Ocelot ( do qual eu sou um dos principais contribuidores ) pode ser compilado sem drivers de dispositivo CUDA (libcuda.so) instalados se você deseja usar o emulador ou backends LLVM. Eu demonstrei o emulador em sistemas sem GPUs NVIDIA.
O emulador tenta implementar fielmente as especificações PTX 1.4 e PTX 2.1, que podem incluir recursos que GPUs mais antigos não suportam. O tradutor LLVM se esforça para uma tradução correta e eficiente de PTX para x86, o que tornará o CUDA uma maneira eficaz de programar CPUs multicore, bem como GPUs.
-deviceemu
tem sido um recurso obsoleto do CUDA há algum tempo, mas o tradutor LLVM sempre foi mais rápido.Além disso, vários verificadores de correção são incorporados ao emulador para verificar: acessos de memória alinhados, acessos à memória compartilhada estão devidamente sincronizados e desreferenciamento de memória global acessa regiões alocadas de memória. Também implementamos um depurador interativo de linha de comando inspirado em grande parte pelo gdb para uma única etapa através de kernels CUDA, definir pontos de interrupção e pontos de controle, etc ... Essas ferramentas foram desenvolvidas especificamente para acelerar a depuração de programas CUDA; você pode achá-los úteis.
Desculpe pelo aspecto apenas do Linux. Começamos uma ramificação do Windows ( bem como uma porta do Mac OS X ), mas a carga de engenharia já é grande o suficiente para estressar nossas pesquisas. Se alguém tiver algum tempo e interesse, pode nos ajudar a fornecer suporte para o Windows!
Espero que isto ajude.
fonte
Você pode verificar também o projeto gpuocelot , que é um verdadeiro emulador no sentido de que PTX (bytecode no qual o código CUDA é convertido) será emulado.
Há também um tradutor LLVM, seria interessante testar se ele é mais rápido do que ao usar -deviceemu.
fonte
O kit de ferramentas CUDA tinha um integrado até o ciclo de lançamento do CUDA 3.0. Se você usar uma dessas versões muito antigas do CUDA, certifique-se de usar -deviceemu ao compilar com nvcc.
fonte
https://github.com/hughperkins/cuda-on-cl permite que você execute programas NVIDIA® CUDA ™ em GPUs OpenCL 1.2 (divulgação completa: sou o autor)
fonte
Tenha cuidado ao programar usando -deviceemu, pois há operações que o nvcc aceitará enquanto estiver no modo de emulação, mas não quando realmente estiver sendo executado em uma GPU. Isso é encontrado principalmente na interação dispositivo-host.
E, como você mencionou, prepare-se para uma execução lenta.
fonte
GPGPU-Sim é um simulador de GPU que pode executar programas CUDA sem usar GPU. Eu criei uma imagem docker com GPGPU-Sim instalado para mim, caso isso seja útil.
fonte