NVIDIA NVCC et CUDA: Cubin vs PTX
- Je utiliser CUDA 4.0 arch., avec un Compute_Capability 2.0 périphérique (GTX460).
Quelle est la différence entre le "cubin" et le " ptx fichier?
Je pense que le cubin est un code natif pour le gpu c'est donc arch. spécifique, et le ptx est un langage intermédiaire qui s'exécutent sur Fermi périphériques (par exemple la Geforce GTX 460) via la compilation JIT. Quand je compile un cu source, je peux choisir entre le ptx ou cubin cible. Si je veux le cubin fichier, j'ai choisi le "code=sm_20". Mais si je veux un fichier ptx-je utiliser le "code=compute_20".
Est-il correct?
source d'informationauteur user973764
Vous devez vous connecter pour publier un commentaire.
Vous avez mélangé les options pour sélectionner une phase de compilation (
-ptx
et-cubin
) avec les options pour contrôler les périphériques de cible (-code
), de sorte que vous devriez revoir la documentation.NVCC est la NVIDIA compilateur pilote. Le
-ptx
et-cubin
options sont utilisées pour sélectionner des phases de compilation, par défaut, sans aucune phase d'options spécifiques nvcc va tenter de produire un exécutable à partir d'entrées. La plupart des gens utilisent le-c
option à cause nvcc pour produire un fichier de l'objet qui sera ensuite lié à un fichier exécutable par la plateforme par défaut de l'éditeur de liens, la-ptx
et-cubin
options ne sont vraiment utiles que si vous utilisez le Pilote de l'API. Pour plus d'informations sur les étapes intermédiaires, découvrez les nvcc manuel qui est installé lorsque vous installez le CUDA Toolkit.-ptx
est un texte brut fichier PTX. PTX est un intermédiaire de langage d'assemblage pour cartes Graphiques NVIDIA qui n'a pas encore été entièrement optimisées et plus tard seront assemblés à l'appareil de code spécifiques (appareils différents ont différentes registre de compte par exemple, donc entièrement l'optimisation de la PTX serait erroné).-cubin
est un gros binaire qui peut contenir un ou plus spécifique à l'appareil les images binaires ainsi que (en option) PTX.La
-code
argument que vous consultez a un autre but entièrement. Je vous encourage à consulter les nvcc documentation qui contient plusieurs exemples, en général, je conseille à l'aide de la-gencode
option au lieu de cela, car il permet plus de contrôle et permet à la cible de plusieurs appareils en un seul binaire. Comme un exemple rapide:-gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'
causes nvcc à la cible de tous les appareils à calculer la capacité de xx (c'est learch=
bits) et de les intégrer PTX (code=compute_xx
) ainsi que de l'appareil binaires pour sm_yy et sm_zz dans le final de la graisse binaire.