2008-09-17 4 views
6

Je vérifiais le site "whatif" d'Intel et leur compilateur de mémoire transactionnelle (chaque thread doit faire des validations atomiques ou restaurer la mémoire du système, comme le ferait une base de données).Est-ce que quelqu'un a essayé la mémoire transactionnelle pour C++?

Cela semble être un moyen prometteur de remplacer les verrous et les mutex, mais je ne trouve pas beaucoup de témoignages. Quelqu'un a-t-il quelque chose à ajouter?

+0

Cette question et ses réponses sont-elles toujours d'actualité? –

+0

@JanusTroelsen vérifier les mises en œuvre disponibles dans https://en.m.wikipedia.org/wiki/Transactional_memory –

+0

Connexes: https://www.realworldtech.com/haswell-tm/ pour l'écriture de David Kanter de certains sous -les détails sur la façon dont il est réellement implémenté sur les processeurs Intel. Et aussi quelques trucs intéressants sur la mémoire transactionnelle en général. –

Répondre

7

Je ne l'ai pas utilisé le compilateur Intel, cependant, Herb Sutter a eu quelques commentaires intéressants sur elle ...

De Sutter Speaks: The Future of Concurrency

Voyez-vous beaucoup d'intérêt et utilisation de la mémoire transactionnelle, ou le concept est-il trop difficile à comprendre pour la plupart des développeurs?

Il n'est pas encore possible de savoir qui l'utilise parce qu'il n'a pas encore été mis sur le marché. Intel dispose d'un prototype de compilateur de mémoire transactionnelle logicielle. Mais si la question est "Est-ce trop difficile à utiliser pour les développeurs?" la réponse est que j'espère certainement pas. Tout le problème est que c'est beaucoup plus facile que les verrous. C'est la seule chose importante sur l'horizon de la recherche qui laisse espérer une réduction importante de notre utilisation des serrures. Il ne remplacera jamais complètement les verrous, mais c'est notre seul grand espoir de les remplacer partiellement.

Il existe certaines limitations. En particulier, certaines E/S ne sont pas intrinsèquement transactionnelles: vous ne pouvez pas prendre un bloc atomique qui invite l'utilisateur à lire son nom et lire le nom depuis la console, et abandonner et réessayer automatiquement le bloc s'il est en conflit avec une autre transaction; l'utilisateur peut faire la différence si vous le lui demandez deux fois. La mémoire transactionnelle est idéale pour les choses qui ne font que toucher la mémoire.

Chaque fournisseur majeur de matériel et de logiciels que je connais dispose de plusieurs outils de mémoire transactionnelle dans R & D. Il existe des conférences et des articles académiques sur les réponses théoriques aux questions de base. Nous ne sommes pas encore au stade Model T où nous pouvons l'expédier. Vous verrez probablement des prototypes précoces et limités dans lesquels vous ne pouvez pas faire de mémoire transactionnelle illimitée - où vous ne pouvez lire et écrire, disons, que 100 emplacements de mémoire. C'est toujours très utile pour activer plus d'algorithmes sans verrouillage, cependant.

+0

À propos de ce qui est trop difficile pour les développeurs: voir l'article «La programmation transactionnelle est-elle réellement plus facile» par Rossbach et al: http://www.cs.utexas.edu/~rossbach/pubs/wddd09-rossbach.pdf –

-1

Dans certains cas, je peux voir cela utile et même nécessaire.

Cependant, même si le processeur a des instructions spéciales qui facilitent ce processus, il y a toujours une surcharge importante par rapport à un mutex ou un sémaphore. Selon la façon dont il est implémenté, il peut également avoir un impact sur les performances en temps réel (il faut soit arrêter les interruptions, soit les empêcher d'écrire dans vos zones partagées).

Mon attente est que si cela était implémenté, il ne serait nécessaire que pour des parties d'un espace mémoire donné, et donc l'impact pourrait être limité.

-Adam

+0

Cela ne ressemble pas à de la mémoire transactionnelle ... Quel est le coût comparé aux mutex et aux sémaphores? –

+0

Il existe plusieurs endroits où les frais généraux sont plus élevés. Un exemple évident est le retour en arrière d'une transaction. Cela rend également la mise en cache plus difficile et entraîne plus de frais généraux, car tout doit être immédiatement réécrits en mémoire. La mémoire transactionnelle est une bonne idée pour certaines applications, mais elle affecte les performances du système et ne doit donc pas être déployée pour chaque application et système. –

+1

Ah, mais plusieurs redémarrages sont le cas pathologique pour les transactions. Comment cela se compare-t-il au cas pathologique des verrous (blocage long, rebondissement entre caches)? –

4

Dr. Dobb a eu un article sur le concept de l'année dernière: Programmation par Calum Grant Transactionnelle - http://www.ddj.com/cpp/202802978

Il comprend quelques exemples, des comparaisons et conclusions à l'aide de sa bibliothèque par exemple.

1

Sun Microsystems a annoncé la sortie d'un nouveau processeur l'année prochaine, baptisé Rock, qui prend en charge la mémoire transactionnelle.Il aura quelques limitations, mais c'est une bonne première étape qui devrait faciliter le remplacement des serrures/mutex par les programmeurs avec des transactions et. Pour une discussion intéressante sur le sujet, donnée par Mark Moir, l'un des chercheurs de Sun travaillant sur la mémoire transactionnelle et le rock, consultez le link.

Pour plus d'informations et d'annonces de Sun sur Rock et Transactional Memory en général, ce link.

Le obligatoire wikipedia entry :)

Enfin, this link, à l'Université du Wisconsin-Madison, contient une bibliographie de la plupart des recherches qui ont été et est fait à propos transactionnelles mémoire, que ce soit lié au matériel ou logiciel en relation.

Questions connexes