Frage

Ich war gerade im Intels „whatif“ Website und ihren Transactional Memory-Compiler (jeder Thread hat atomare Commits zu machen oder den Speichers des Systems, wie ein Datenbank-Rollback würde).

Es ist wie ein vielversprechender Weg scheint Schlösser und Mutexe zu ersetzen, aber ich kann viele Zeugnisse nicht finden. Hat jemand hier eine Eingabe haben?

War es hilfreich?

Lösung

Ich habe nicht Intels Compiler verwendet, jedoch Herb Sutter hatte einige interessante Kommentare dazu ...

Sutter spricht: Die Zukunft der Concurrency

Haben Sie viele Sehenswürdigkeiten in und Nutzung von Transaktionsspeicher zu sehen, oder ist das Konzept zu schwierig für die meisten Entwickler zu erfassen?

Es ist noch nicht möglich zu beantworten, die es verwenden, weil es nicht auf dem Markt noch gebracht wurde. Intel hat eine Software Transactional Memory Compiler Prototyp. Aber wenn die Frage „Ist es zu hart für Entwickler zu benutzen?“ die Antwort ist, dass ich nicht mit Sicherheit hoffen. Der springende Punkt ist, es ist viel einfacher, als Schleusen. Es ist die einzige große Sache auf dem Forschungs Horizont, die Hoffnung hält aus stark unsere Verwendung von Sperren zu reduzieren. Es wird nie Schlösser vollständig ersetzen, aber es ist unsere einzige große Hoffnung, sie teilweise zu ersetzen.

Es gibt einige Einschränkungen. Insbesondere einig I / O ist von Natur aus nicht transaktionale Sie können einen atomaren Block nicht nehmen, die den Benutzer nach seinem Namen aufgefordert und den Namen von der Konsole lesen, und nur automatisch abbrechen und den Block wiederholt, wenn er mit einer anderen Transaktion in Konflikt steht; der Benutzer kann den Unterschied erkennen, wenn man ihn zweimal auffordern. Transactional Memory ist für Sachen, die nur Speicher berührt, though.

Jeder große Hardware- und Software-Anbieter die ich kenne mehrere Transactional Memory Tools in F & E hat. Es gibt Konferenzen und wissenschaftliche Arbeiten über theoretische Antworten auf grundlegende Fragen. Wir sind nicht im Modell T-Stadium noch, wo wir es heraus versenden. Sie werden wahrscheinlich früh, begrenzte Prototypen sehen, wo Sie nicht unbegrenzt Transactional Memory-wo tun können Sie nur lesen und schreiben können, sagen wir, 100 Speicherplätze. Das ist immer noch sehr nützlich für mehr Lock-Free-Algorithmen ermöglicht, though.

Andere Tipps

Dr. Dobbs hatte einen Artikel über das Konzept im vergangenen Jahr: Transactional Programmierung von Calum Grant - http: //www.ddj .com / CPP / 202802978

Es enthält einige Beispiele, Vergleiche und Schlussfolgerungen seine Beispiel-Bibliothek.

Ich habe die kombinatorische Bibliothek STM oben auf einige der funktionalen Programmierung Ideen. Es erfordert keine Compiler-Unterstützung (außer es C ++ 17 verwendet), keine neue Syntax bringen. In der Regel übernimmt er die Schnittstelle der STM Bibliothek von Haskell.

Also, meine Bibliothek hat einige nette Eigenschaften:

  • monadisch Kombinatorik. Jede Transaktion ist eine Berechnung innerhalb der benutzerdefinierten Monade genannt STML. Sie können monadischen Transaktionen in mehr große monadischen Transaktionen kombinieren.
  • Die Transaktionen werden vom Datenmodell getrennt. Sie bauen Ihre gleichzeitige Datenmodell mit Transaktionsvariablen (TVars) und führen Transaktionen über sie.
  • Es ist retry combinator. Es ermöglicht Ihnen, die Transaktion erneut aus. Sehr nützlich, kurz und verständlich Transaktionen zu bauen.
  • Es gibt verschiedene monadischen combinators Berechnungen auszudrücken kurz.
  • Es ist Context. Jede Berechnung sollte in einem bestimmten Kontext ausgeführt wird, nicht in der globalen Laufzeit. So können Sie viele verschiedene Kontexte haben, wenn Sie mehrere unabhängige STM-Cluster müssen.
  • Die Implementierung ist ganz vom Konzept her einfach. Wenigstens die Referenzimplementierung in Haskell ist so, aber ich musste mehrere Ansätze für C ++ neu zu erfinden Umsetzung aufgrund des Fehlens eines guten Unterstützung der funktionalen Programmierung.

Die Bibliothek zeigt sehr schön Stabilität und Robustheit, auch wenn wir es experimentell prüfen. Darüber hinaus eröffnet mein Ansatz eine Vielzahl von Möglichkeiten, die Bibliothek durch die Leistung zu verbessern, Features, Reichhaltigkeit, etc.

seine Arbeit zu demonstrieren, ich habe die Dining Philosophers Aufgabe gelöst. Sie können den Code unten in den Links. Beispieltransaktion:

STML<bool> takeFork(const TVar<Fork>& tFork)
{
    STML<bool> alreadyTaken = withTVar(tFork, isForkTaken);
    STML<Unit> takenByUs    = modifyTVar(tFork, setForkTaken);
    STML<bool> success      = sequence(takenByUs, pure(true));
    STML<bool> fail         = pure(false);
    STML<bool> result       = ifThenElse(alreadyTaken, fail, success);
    return result;
};

UPDATE Ich habe ein Tutorial geschrieben habe, können Sie finden es hier .

Sun Microsystems haben angekündigt, dass sie einen neuen Prozessor im nächsten Jahr dem Codenamen Felsen veröffentlicht seine, das Hardware-Unterstützung für transaktionale Speicher. Es wird einige Einschränkungen, aber es ist ein guter erster Schritt, die es leichter machen sollte für Programmierer Sperren / mutexes mit Transaktionen und erwarten gute Leistung aus ihm heraus zu ersetzen.

Für einen interessanten Vortrag zum Thema, da von Mark Moir, einer der Forscher bei Sun arbeitet an Transactional Memory and Rock, lesen Sie in diesem link

Weitere Informationen und Ankündigungen von Sun über Rock und Transactional Memory im Allgemeinen, diese Link .

Die obligatorische Wikipedia-Eintrag: )

Schließlich diesen Link , an der Universität Wisconsin-Madison, enthält eine Bibliographie der größte Teil der Forschung, die war und über Transactional Memory getan wird, ob es sich um einen Hardwarefehler oder Software.

In einigen Fällen kann ich dies sehe als nützlich und sogar notwendig.

Doch selbst wenn der Prozessor spezielle Anweisungen hat, das diesen Prozess einfacher es macht, ist immer noch ein großer Overhead auf ein Mutex oder Semaphore verglichen. Je nachdem, wie es implementiert ist kann es auch Echtzeit-Performance (müssen entweder Interrupts stoppen oder verhindern, dass sie das Schreiben in die freigegebenen Bereiche) auswirken.

Meine Erwartung ist, dass, wenn dies umgesetzt wurde, wäre es nur für Teile eines gegebenen Speicherplatz benötigt werden, aber, und so könnten die Auswirkungen begrenzt werden.

-Adam

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top