Ich interessiere mich für die Feinabstimmung Cache-bewusste Datenstrukturen (siehe zum Beispiel die Sperre-freie Skip-Struktur in Michael Spiegel's dissertation oder Herlihy et al hopscotch hashing) sowie in der Verhinderung false sharing z. während gleichzeitiger Array-Verarbeitung. Ich weiß bereits, wie man die JVM-Pointer-Größe über die Eigenschaft "sun.arch.data.model" findet, aber ich konnte keine Möglichkeit finden, die Größe von Cache-Zeilen im L1-Cache zu bestimmen.Wie finde ich die Größe der L1 Cache-Zeilen innerhalb eines Java-Prozesses?
Beachten Sie, dass diese Informationen nicht kritisch sind, da ich einfach weiterhin konservative Schätzungen für die L1-Zeilengröße verwenden kann (64 Byte bei der Feinabstimmung von Cache-bewussten Datenstrukturen oder 256 Byte bei Verhinderung von falschem Teilen); Wenn es jedoch einfach ist, die L1-Cache-Eigenschaften zu erhalten, kann ich sie auch nutzen.
Ich denke, dass diese (sehr interessante, würde ich sogar aufregende sagen) Aufgabe würde viel zu viel zu implementieren kosten. Ich würde hier die faule Sache machen: Hardcode-Cachegrößen für CPU-Modelle, und bestimmen, dass - wie es einfacher sein könnte. Dies könnte jedoch schiefgehen, wenn die JVM in einer VM ausgeführt wird, die das eigentliche CPU-Modell verbirgt, während Ihre Lösung die richtigen Größen für dieses Szenario verwendet ... – ppeterka
Die Liniengröße ist die Liniengröße; In welchem Sinne ist es jemals 64 ** und ** 256? –
@OliCharlesworth Wenn ich die genaue Zeilengröße nicht kenne, verwende ich verschiedene Schätzungen, je nachdem, was ich versuche, z. Wenn ich eine Cache-bewusste Datenstruktur verfeinere, werde ich die niedrigere Schätzung von 64 Bytes verwenden, weil auf diese Weise die Datenstruktur immer noch gut funktioniert, wenn die tatsächliche Zeilengröße größer als 64 Bytes ist, und wenn ich es bin Wenn ich die falsche Freigabe verhindere, werde ich die höhere Schätzung von 256 Bytes verwenden, da dies immer noch gut funktioniert, wenn die tatsächliche Zeilengröße weniger als 256 Bytes beträgt. –