Maison >développement back-end >C++ >Pourquoi les compilateurs n'optimisent-ils pas les écritures « std::atomic » redondantes consécutives ?

Pourquoi les compilateurs n'optimisent-ils pas les écritures « std::atomic » redondantes consécutives ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-15 06:34:14595parcourir

Why Don't Compilers Optimize Consecutive Redundant `std::atomic` Writes?

Pourquoi les compilateurs ne fusionnent pas les std::atomic redondants consécutifs

Question :

Pourquoi les compilateurs s'abstiennent-ils de fusionner des écritures consécutives de la même valeur en un seul atome variable ?

Réponse :

Bien que les normes C 11 / C 14 permettent de regrouper plusieurs magasins en un seul, les compilateurs n'implémentent pas cette optimisation en raison de :

Préoccupations liées à la qualité de la mise en œuvre

1. Problèmes de barre de progression :

L'enfoncement et le pliage des magasins de boucles peuvent entraîner l'apparition d'une barre de progression bloquée à zéro jusqu'à ce qu'elle passe à 100 % à la fin, au lieu d'afficher la progression de manière incrémentielle.

2. Principe de la moindre surprise :

Les programmeurs s'attendent à ce que chaque instruction de magasin atomique ait une opération de mémoire distincte, plutôt que d'être optimisée. Cela évite les comportements inattendus.

3. Cas d'utilisation limités :

Les compilateurs ont déterminé que les scénarios dans lesquels cette optimisation serait bénéfique, tels que la réduction des opérations inutiles du nombre de références shared_ptr, sont rares.

Restrictions imposées par la norme

1. Règle as-if :

La règle as-if permet aux compilateurs de déterminer l'ordre des opérations de mémoire, même si le code source indique le contraire. Cela permet des optimisations internes qui peuvent modifier le comportement du programme.

Développements futurs

1. Extensions de l'API :

Des discussions au sein des groupes de travail C sont en cours pour étendre l'API std::atomic afin de fournir un contrôle sur les comportements d'optimisation, permettant aux compilateurs d'optimiser le cas échéant.

2. Variables atomiques volatiles :

Utilisation de variables atomiques volatiles garantit que les magasins de la variable ne peuvent pas être optimisés, car les accès aux objets volatils ne peuvent pas être supprimés du code. Cependant, cette approche a ses propres limites, comme indiqué dans la réponse fournie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn