2015-09-15 1 views
2

Je suis en train de plonger dans la programmation multi-thread et de penser au comptage de référence sans verrouillage en utilisant des opérations atomiques.Combien coûtent les opérations atomiques?

Il est évident que l'opération atomique pourrait être plus lente que les opérations non-atomiques au moins à une échelle constante. Mes soucis concernent d'autres synchronisations de CPU pour effectuer des opérations atomiques.

Je me demande si (si, et dans quelle mesure) l'exécution de l'opération atomique sur le noyau A affecte les performances d'autres noyaux qui:

  1. ont rien lié à noyau A
  2. exécutant des différents fils de même processus comme noyau A
  3. sont exécuter une opération atomique
  4. sont exécuter une opération atomique et exécutant des différents fils de même processus que noyau A
  5. sont l'exécution de toute mémoire r opération exaltée, à savoir. chargement, de stockage, ...
  6. exécutons toute opération liée à la mémoire dans la même région de mémoire (ligne de cache, la page?) comme noyau A
+1

Copie possible de [coût d'opération atomique] (https://stackoverflow.com/questions/2538070/atomic-operation-cost) – Tijmen

Répondre

2

Beaucoup de gens pensent que les opérations atomiques ne coûtent pas cher. Cependant, ce n'est pas forcément vrai, puisque l'opération atomique est une généralisation. Il existe 3 types d'opérations atomiques:

  1. atomique sauver
  2. charge atomique
  3. compareAndSet atomique (incrément/décrément/etc)

Les deux premiers sont généralement plus ou moins pas cher (ou, comme nous le savons tous, ont exactement le même coût que leurs amis non-atomiques sur Intel). Ils imposent des barrières de mémoire, mais les barrières ne concernent que le processeur qui les exécute et les processeurs travaillent dur pour rendre les barrières efficaces. Cependant, le troisième pourrait ne pas être aussi bon marché. Atomic CAS et ses amis effectuent réellement l'opération en boucle, jusqu'à ce qu'ils réussissent, donc en cas de conflit, cela pourrait prendre beaucoup de temps pour effectuer l'opération.

1

Je compare une opération de lecture-modification-écriture atomique à l'opération non-atomique correspondante sur les processeurs x86 modernes.

ont rien lié à noyau A

Aucun effet.

exécutant des différents fils de même processus que noyau A

Aucun effet.

sont exécutaient opération atomique

Aucun effet.

sont exécuter une opération atomique et exécutant des différents fils de même processus que noyau A

Aucun effet.

sont l'exécution de toute opération liée à la mémoire, à savoir. charger, stocker, ...

Aucun effet.

sont exécuter une opération liée à la mémoire dans la même zone de mémoire (ligne de cache, la page?) En tant que noyau A

La ligne de cache doit être acquise exclusivement par le noyau effectuant l'opération atomique (voler à partir de n'importe quel autre (s) noyau (s)) et ne peut pas être accédé par un autre noyau tant que l'opération atomique n'est pas terminée et que le trafic inter-cache le synchronise de façon à être partagé ou exclusif dans l'autre core.

Le coût principal des opérations atomiques est aux pipelines du noyau exécutant l'instruction atomique. Parce que l'opération atomique doit avoir lieu en même temps à un endroit bien défini, elle ne peut (surtout) pas chevaucher d'autres opérations. C'est une pénalité énorme pour un processeur superscalaire qui gagne en performance en gardant beaucoup d'instructions dans les différentes étapes du traitement.