Warum ist lokaler Thread-Speicher so langsam?

Arbeite ich an einem custom-mark-release-Stil-memory-allocator für die D programming language, das funktioniert durch die Zuordnung von thread-lokalen Regionen. Es scheint, dass der thread local storage Engpass verursacht eine riesige (~50%) Verlangsamung bei der Zuweisung von Speicher, die aus diesen Regionen im Vergleich zu einer ansonsten identischen single-threaded-version der code, auch nach der Gestaltung mein code, nur eine TLS-lookup pro allocation/deallocation. Dies basiert auf der Zuweisung/Freigabe von Speicher eine große Anzahl von Zeiten in einer Schleife, und ich versuche, herauszufinden, ob es ein Artefakt meiner benchmarking-Methode. Mein Verständnis ist, dass thread local storage sollte im Grunde nur Zugriff auf etwas, was durch eine zusätzliche Schicht der Dereferenzierung, ähnlich dem Zugriff auf eine variable über einen Zeiger. Ist das falsch? Wie viel overhead macht der thread-lokalen Speicher in der Regel haben?

Hinweis: Obwohl ich erwähnen, D, ich interessiere mich auch für die Allgemeinen Antworten, die nicht spezifisch für D, da D die Implementierung der thread-lokaler Speicher wird sich wahrscheinlich verbessern, wenn es langsamer ist, als die besten Implementierungen.

InformationsquelleAutor der Frage dsimcha | 2009-02-03

Schreibe einen Kommentar