Kann irgendjemand auf Benchmark-Ergebnisse verweisen, die die Leistung von C11 / C ++ 11-Code mit entspannten atomaren Operationen vergleichen (insbesondere memory_order_release
und memory_order_acquire
, aber auch memory_order_consume
und memory_order_relaxed
) gegenüber dem Standard memory_order_seq_cst
? Alle Architekturen sind von Interesse. Vielen Dank im Voraus.
Ich habe ein bisschen Benchmarking auf ARMv7 gemacht, siehe Ссылка für den Bericht, die Folien für meinen Vortrag bei EuroLLVM und den Seqlock-Code, den ich verwendet habe.
Kurzgeschichte: Im Seqlock-Code war die Acquire / Release-Funktion etwa 40% schneller als die sequenziell konsistente Version.
Dies ist vielleicht nicht die beste Lösung, aber bis jetzt habe ich CDSChecker für eine Bank benutzt. Markierung in einem meiner Projekte. Ich habe es noch nicht für komplette Programme verwendet, sondern nur für unabhängige Einheiten.
Für ein bestimmtes Stück Code (eine Work-Stealing Dequeue) fand ich ein sehr nettes Papier , das eine C11-Version mit schwachen Atomics, nur sc-atomics, handoptimiert, bewertet Assembly, und eine falsche Version mit völlig entspannten Atomics. (Zufällig wurde später ein Fehler in der C11-Version des oben erwähnten CD-Checkers gefunden.) Ähnliche Beispiele sind willkommen.
Tags und Links c++11 shared-memory concurrency c11 relaxed-atomics