2012-12-02 1 views
4

Juste une question générale sur cublas. Pour un thread unique, s'il n'y a pas de transfert de mémoire de GPU à CPU (par exemple cublasGetVector), les fonctions du noyau de cublas (par exemple cublasDgemm) seront-elles automatiquement synchronisées avec l'hôte?Les fonctions du noyau cublas seront-elles automatiquement synchronisées avec l'hôte?

cublasDgemm(); 
//cublasGetVector(); 
    host_functions() 

En outre, qu'en est-il entre deux appels de noyau adjacents? Et, qu'en est-il d'un transfert synchronisé n'impliquant pas la mémoire globale utilisée dans le noyau précédent?

cublasDgemm(...gA...gB...gC); 
cublasGetVector(...gD...D...); 

Répondre

7

Non, l'API CUBLAS est, à l'exception de quelques routines de niveau 1 qui renvoient une valeur scalaire, asynchrone. Les routines de niveau 3 comme cublasDgemm ne bloquent pas l'hôte, vous devez appeler une routine d'API de blocage comme un transfert de mémoire synchrone ou un appel de synchronisation hôte-GPU explicite pour vous assurer que l'appel CUBLAS est terminé.

+0

Merci! Maintenant qu'en est-il entre deux noyaux, et qu'en est-il du transfert de mémoire synchrone n'impliquant pas la mémoire globale utilisée dans le noyau précédent? (le message ci-dessus a également été mis à jour). –

+0

Les noyaux sont toujours lancés de manière asynchrone et les transferts de mémoire synchrones sont (sauf dans un cas) toujours synchrones. Donc, vos appels de dgemm ne bloqueront pas et vos transferts de mémoire vont bloquer. – talonmies

Questions connexes