(Dies kann eine allgemeine Frage für die Atom Inkrement/Dekrement sein, aber ich habe die Situation im Bereich der shared_ptrs
angetroffen)Treten shared_ptrs aufgrund von Referenzzählern auf atomare Inkremente/Dekremente auf?
Hat ein shared_ptr
Begegnung zwei Cache-Zeile fehlt/accesses- wenn das Atomreferenzzähler erhöht und erniedrigt ?
ich dies fand:
aber es scheint nicht allzu schlüssig zu sein ....
UPDATE:
Wenn ich eine Schleife Millionen laufen von Zeiten, inkrementieren eine atomare Variable ich bekomme eine L1-Cache-Miss-Rate von 0,2. Wenn ich dasselbe mit einem nicht-atomaren Int mache, bekomme ich 0 L1 Cache-Fehltreffer-Rate .....
Der Test würde bedeuten, dass die L1-Cache-Zeile entfernt wird.
Sorry, es ist kein Nswer. Ich bin kein Experte in atomaren Operationen, werde ich nicht streiten, wie teuer sie sind. Ich könnte jedoch darüber diskutieren, ob diese Operation überhaupt aufgerufen wird. Ich frage mich, in welchem Szenario spielt es für Sie eine Rolle? Wenn der Zeiger mit make_shared erstellt wurde, wird offensichtlich die Cache-Zeile mit der Referenz gelesen und die Daten werden einmal gelesen, also könnte man sagen, es ist ein Cache-Fehler weniger. Als nächstes wird dank des move-Operators die Referenzanzahl nicht geändert, wenn shared_ptr bewegt wird (z. B. die Größe von std :: vector). –
biocomp
Das stimmt nicht ganz. Wenn Ihr Objekt größer als cache_line_size ist und Sie ein Datenelement lesen, das am Anfang deklariert wurde, erhalten Sie zwei Cachezeilenlesevorgänge. – user997112
Sie haben Recht) Obwohl ich denke, dass es ein seltener Fall ist. – biocomp