Eh bien, presque toute intrinsèque CUDA peut être remplacé, donc je vais interpréter votre question
Peut __shfl_xor
être remplacé bon marché sur les GPU SM_21?
Et la réponse est: Pas vraiment; vous encourrez une pénalité. Votre meilleure option, comme @ commentaire de RobertCrovella suggère est d'utiliser la mémoire partagée:
- Chaque voie écrit ses données dans un emplacement en mémoire partagée (rendre ces valeurs moyennes de 4 octets consécutifs pour éviter bank conflicts)
- Effectuer une sorte de synchronisation (probablement vous devrez
__syncthreads()
)
- Chaque voie lit à partir de la position de la mémoire partagée dans laquelle la voie dont elle veut écrire la valeur.
Je ne pas orthographier le code de ne pas prendre le plaisir loin pour vous :-)
modifier: Bien que l'exécution de lecture aléatoire est plus complexe, il est encore, au moins sémantiquement, une opération sur les registres; et il ne nécessite pas de synchronisation. L'alternative de mémoire partagée serait donc plus lente.
Oui il y a, si vous voulez l'écrire. – talonmies
Pratiquement tout ce que vous pouvez faire avec les opérations de shuffle peut être fait avec des opérations de mémoire partagée, ce qui permet également une communication inter-thread. Je ne suggère pas que la mise en œuvre soit identique, juste qu'il existe un "code équivalent possible" utilisant la mémoire partagée. –
@talonmies comment ce commentaire peut-il aider l'OP? C'est une question non triviale, car je ne considère pas l'intrinsèque de shuffle comme une simple caractéristique de cuda. –