2017-03-22 3 views
0

J'ai utilisé atomicCAS dans une boucle do-while pour effectuer diverses opérations arithmétiques si nécessaire dans mes premiers programmes parallèles. Je vois qu'il existe d'autres opérations comme atomicInc qui serait la même chose que l'incrémentation en utilisant atomicCAS dans un do-while, correct? Serait-ce plus efficace (en termes de cycles d'horloge), ou est-ce qu'il n'y a pas de point de transition loin de ma surexploitation de atomicCAS?Quand devrais-je privilégier une opération atomique plus spécifique par rapport à l'utilisation de atomicCAS?

+0

T Willy, veuillez considérer accepter la réponse de @talonmies. – einpoklum

Répondre

3

La seule réponse sensée à cette question est "chaque scénario où il y a une primitive atomique spécialement conçue pour effectuer la même opération".

Sur les GPU nVIDIA, l'utilisation de atomicCAS pour un faux mutex autour d'opérations arithmétiques n'a de sens que lorsque vous n'avez pas d'autre alternative. Même s'il n'y a pas de différence de performance tangible aujourd'hui, en utilisant une primitive atomique qui se traduit par une instruction PTX, vous offrez à votre code la possibilité de gains de performances sur les futurs matériels et futures chaînes d'outils.