Le CUDA runtime permet de compiler et lier votre CUDA noyaux dans des exécutables. Cela signifie que vous n'avez pas à distribuer cubin fichiers avec votre application, ou de traiter avec les charger via le pilote de l'API. Comme vous l'avez constaté, il est généralement plus facile à utiliser.
En revanche, le pilote de l'API est plus difficile de programme, mais a fourni plus de contrôle sur la façon dont CUDA est utilisé. Le programmeur doit traiter directement avec l'initialisation, le module de chargement, etc.
Apparemment plus d'information détaillée sur le périphérique peut être interrogé via le pilote API que par l'exécution de l'API. Par exemple, la quantité de mémoire disponible sur l'appareil peut être interrogé uniquement par le biais de l'API de pilote.
À partir de la CUDA Guide du Programmeur:
Il est composé de deux Api:
- Une API de bas niveau appelé le CUDA driver API,
- Un plus haut niveau de l'API appelée l'API CUDA runtime qui est mis en œuvre sur le dessus de
le CUDA driver API.
Ces Api sont mutuellement exclusifs: Une application doit utiliser soit l'un ou l'
d'autres.
Le CUDA runtime facilite le code de l'appareil de gestion en offrant implicite
l'initialisation, le contexte de la gestion, et la gestion du module. Le C de code hôte
généré par nvcc est basé sur le CUDA runtime (voir la Section 4.2.5), de sorte
les applications qui ont un lien à ce code doit utiliser l'API CUDA runtime.
En revanche, le CUDA driver API nécessite plus de code, est plus difficile à programmer et
debug, mais offre un meilleur niveau de contrôle et est indépendant de la langue, car il ne
traite cubin objets (voir Section 4.2.5). En particulier, il est plus difficile de
configurer et de lancer de noyaux à l'aide de CUDA driver API, depuis l'exécution
la configuration et les paramètres du noyau doit être spécifié de manière explicite les appels de fonction
au lieu de l'exécution de la configuration de la syntaxe décrite dans la Section 4.2.3. Aussi, l'appareil
l'émulation (voir la Section 4.5.2.9) ne fonctionne pas avec le CUDA driver API.
Il n'y a pas remarqué de différence de performances entre les API. Comment vos noyaux utilisation de la mémoire et de la manière dont ils sont disposés sur le GPU (dans les croisements et les blocs) aura un effet beaucoup plus prononcé.