Émulateur GPU pour la programmation CUDA sans le matériel

Question: Existe-t-il un émulateur pour une carte Geforce qui me permettrait de programmer et de tester CUDA sans avoir le matériel réel?


Info:

Je cherche à accélérer quelques simulations de la mienne dans CUDA, mais mon problème est que je ne suis pas toujours autour de mon bureau pour faire ce développement. Je voudrais faire un peu de travail sur mon netbook à la place, mais mon netbook n'a pas de GPU. Maintenant, pour autant que je sache, vous avez besoin d'un GPU compatible CUDA pour exécuter CUDA. Est-il un moyen de contourner cette? Il semblerait que le seul moyen soit un émulateur GPU (qui serait évidemment douloureusement lent, mais fonctionnerait). Mais quel que soit le moyen de le faire, j'aimerais entendre.

Je programme sur Ubuntu 10.04 LTS.

95
demandé sur Mateusz Piotrowski 2010-06-21 22:28:36

6 réponses

Pour ceux qui cherchent la réponse en 2016 (et même 2017)...


Avertissement

  • j'ai échoué à émuler le GPU après tout.
  • Il peut être possible d'utiliser gpuocelot Si vous remplissez sa liste de dépendance.

J'ai essayé d'obtenir un émulateur pour BunsenLabs (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU/Linux).

Je vais vous dire ce que j'ai appris.


  1. nvcc utilisé pour avoir une option -deviceemu dans CUDA Toolkit 3.0

    J'ai téléchargé CUDA Toolkit 3.0, l'ai installé et essayé d'exécuter un simple programme:

    #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;
    }
    

    Notez que dans CUDA Toolkit 3.0 nvcc était dans le /usr/local/cuda/bin/.

    Il s'est avéré que j'avais des difficultés à le compiler:

    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".
    

    J'ai trouvé sur Internet que si j'utilisais gcc-4.2 ou tout aussi ancien au lieu de gcc-4.9.2 les erreurs pourraient disparaître. J'ai renoncé.


  2. gpuocelot

    Le answer by Stringer a un lien vers un très vieux site Web du projet gpuocelot. Donc au début, je pensais que le projet a été abandonné en 2012 ou. En fait, il a été abandonné quelques années plus tard.

    Voici quelques sites web à jour:

    J'ai essayé d'installer gpuocelot en suivant le guide . J'ai eu plusieurs erreurs lors de l'installation et j'ai donné de nouveau. gpuocelot n'est plus pris en charge et dépend d'un ensemble de très spécifique versions de bibliothèques et de logiciels.

    Vous pouvez essayer de suivre ce tutoriel de juillet 2015 mais je ne garantis pas que cela fonctionnera. Je n'ai pas testé.


  3. MCUDA

    Le framework de traduction MCUDA est un outil basé sur linux conçu pour compiler efficacement le modèle de programmation CUDA à une architecture CPU.

    Ça pourrait être utile. Voici un lien vers le site web de.


  4. Déchets CUDA

    C'est un émulateur à utiliser sur Windows 7 et 8. Je ne l'ai pas essayé cependant. Il ne semble plus être développé (le dernier commit est daté du 4 juillet 2013).

    Voici le lien vers le site du projet: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    Dernière mise à jour: 12.03.2017

    Comme dashesy souligné dans les commentaires, CU2CL semble être un projet intéressant. Il semble être capable de traduire le code CUDA en code OpenCL. Donc, si votre GPU est capable d'exécuter du code OpenCL, le projet CU2CL pourrait vous intéresser.

    Liens:

31
répondu Mateusz Piotrowski 2017-03-12 12:44:47

Cette réponse est peut-être trop tardive, mais cela vaut la peine d'être noté de toute façon. GPU Ocelot (dont je suis l'un des principaux contributeurs ) peut être compilé sans pilotes de périphériques CUDA (libcuda.so) installé si vous souhaitez utiliser L'émulateur ou les backends LLVM. J'ai démontré l'émulateur sur les systèmes sans GPU NVIDIA.

L'émulateur tente d'implémenter fidèlement les spécifications PTX 1.4 et PTX 2.1 qui peuvent inclure des fonctionnalités que les GPU plus anciens ne supportent pas. Le traducteur LLVM s'efforce d'obtenir une traduction correcte et efficace de PTX vers x86 qui, espérons-le, fera de CUDA un moyen efficace de programmer des processeurs multicœurs ainsi que des GPU. -deviceemu est une fonctionnalité obsolète de CUDA depuis un certain temps, mais le traducteur LLVM a toujours été plus rapide.

De plus, Plusieurs correcteurs d'exactitude sont intégrés dans l'émulateur pour vérifier: les accès à la mémoire alignée, les accès à la mémoire partagée sont correctement synchronisés et les accès au déréférencement de la mémoire globale des régions allouées de la mémoire. Nous avons également implémenté un débogueur interactif en ligne de commande inspiré en grande partie par gdb pour une seule étape à travers les noyaux CUDA, définir des points d'arrêt et des points de veille, etc... Ces outils ont été spécifiquement développés pour accélérer le débogage des programmes CUDA; vous pouvez les trouver utiles.

Désolé pour L'aspect Linux uniquement. Nous avons lancé une branche Windows ( ainsi qu'un port Mac OS X ) mais le fardeau de l'ingénierie est déjà assez important pour souligner nos activités de recherche. Si n'importe qui a du temps et de l'intérêt, ils peuvent nous aider à fournir un support pour Windows!

J'espère que cela aide.

38
répondu kerrmudgeon 2016-09-01 12:18:47

Vous pouvez également vérifier gpuocelot projet qui est un véritable émulateur dans le sens où PTX (bytecode dans lequel le code CUDA est converti) sera émulé.

Il y a aussi un traducteur LLVM, il serait intéressant de tester s'il est plus rapide que lors de l'utilisation de-deviceemu.

36
répondu Stringer 2010-06-21 22:30:58

La boîte à outils CUDA avait un intégré jusqu'au cycle de version Cuda 3.0. Je vous utilise une de ces très anciennes versions de CUDA, assurez-vous d'utiliser-deviceemu lors de la compilation avec nvcc.

14
répondu Jubal 2013-05-25 16:00:04

Https://github.com/hughperkins/cuda-on-cl vous permet D'exécuter des programmes NVIDIA® CUDA™ sur les GPU OpenCL 1.2 (divulgation complète: je suis l'auteur)

6
répondu Hugh Perkins 2016-11-06 01:51:00

Soyez prudent lorsque vous programmez en utilisant-deviceemu car il y a des opérations que nvcc acceptera en mode d'émulation mais pas en cours d'exécution sur un GPU. Ceci est principalement trouvé avec l'interaction périphérique-hôte.

Et comme vous l'avez mentionné, préparez - vous à une exécution lente.

3
répondu Sean 2010-06-21 20:31:32