2010-11-26 5 views
0

J'ai lu que sur un SM avec 8 SP, chaque thread dans une chaîne est mappé à chacun des 8 SP pendant l'exécution d'une instruction. Par conséquent, une déformation est exécutée en 32/8 = 4 cycles d'horloge.CUDA distorsion de chaîne et cycles d'horloge

Si oui, alors supposons que j'ai une instruction if-else dans le code. Supposons que les instructions de branchement "then" et "else" prennent chacune un cycle d'horloge à compléter.

Combien de cycles d'horloge seraient nécessaires pour compléter l'instruction if-else en cas de divergence? Est-ce 2 ou devrait-il être 2 x 4 = 8? (c'est-à-dire dans ce dernier, 2 cycles pour chaque quart de chaîne)

Appréciez toutes les clarifications!

Répondre

6

La granularité est de 4 cycles d'horloge - il y a 4 phases d'instructions et chacune des 4 phases traite la même instruction pour 8 threads (facultativement masqué si vous avez des conditionnels/branchements), ce qui vous permet d'exécuter 32 instructions tous les 4 cycles d'horloge. Donc, pour une branche divergente comme dans votre exemple, vous avez un minimum de 4 horloges pour une branche et un minimum de 4 horloges pour l'autre branche.