Wie wird die Anzahl der Cache-Misses berechnet?

Hey, ich habe hier eine Übungsaufgabe die ich nicht gelöst bekomme.
Die Problemstellung lautet folgendermaßen:

"In einer wissenschaftlichen Anwendung werden Partikel simuliert, die durch ihre aktuelle Positon~r und Geschwindigkeit ~v im dreidimensionalen Raum sowie ihre Masse m modelliert werden. Außerdem wird jedem Partikel eine ID zugewiesen. Die entsprechend gestaltete Datenstruktur sieht wie folgt aus:

typedef struct { 
  uint32_t id; 
  float m; float rx, ry, rz; //position 
  float vx, vy, vz; //velocity
} particle_t;

particle_t *particles =calloc(1000000,sizeof(*particles));

Die Datenstruktur ist somit 32 Byte groß. Die einzelnen Elemente der Struktur liegen dabei hintereinander, also ohne Lücken, im Speicher.

Die Simulation verwendet eine Million Partikel und berechnet deren Bewegung über mehrere Zeitschritte. Pro simuliertem Zeitschritt führt die Anwendung je Partikel folgende Berechnungsvorschrift aus (Aktualisierungsvorgang):

r = r + v * dt (r,v Vektoren)

Gehen Sie davon aus, dass Speicherreservierungen mit calloc() immer an der Grenze einer Cachezeile (Vielfache von 64 Byte) beginnen! Die Cache-Größe1 des Prozessors, auf dem das Programm ausgeführt wird, beträgt 256 KB. Eine Cachezeile umfasst 64 Byte.

Frage 1:

Wie viele Cache-Misses werden pro Aktualisierungsvorgang durchschnittlich beobachtet, wenn alle Partikel aktualisiert werden? Begründen Sie Ihre Antwort

Frage 2:

Die Implementierung der Simulation wird nun geändert. Statt eines Arrays von Strukturen (s.o.) werden für alle Elemente der Struktur eigene Arrays mit jeweils einer Million Elementen verwendet. Wie viele Cache-Misses treten nun im Durchschnitt pro Aktualisierung auf? Begründen Sie Ihre Antwort! Welchen der beiden Implementierungsansätze wählen Sie?"

Ich weiß leider nicht wie ich das angehen soll, und finde auch nichts dazu in der Vorlesung (Das einzige wo Cache-Misses vorkommen ist das False-Sharing-Problem)

Wichtig ist mir nicht die lösung, sondern es zu verstehen. Ich bin für jede hilfe dankbar!

Computer, Technik, Speicher, Informatik, Technologie, Cache
Arraylist mit Inhalt anderer Arraylist überschreiben in Java?

Hallo,
ich bin mir gerade unsicher wie ich am platz und performance sparendsten Folgendes mache:

ich habe in meiner klasse eine Arraylist a1, die mit irgendwelchen long zahlen gefüllt ist.

ich habe eine methode einfuegen(..), die die referenz auf a1 übertragen bekommt.
in dieser methode baue ich mit
ArrayList<Long> temp=new ArrayList<Long>(9);
temp.addAll(stuple);

eine davon unabhängige neue Arraylist, die die selben elemente enthält wie a1.
in der methode füge ich noch anschließend ein paar weitere elemente in diese temp arraylist ein.

nun will ich am ende der methode die ursprüngliche arraylist a1 sozusagen überschreiben mit den Werten aus der neuen arraylist temp.
Ohne allerdings dass hinterher temp auf die selbe arraylist wie a1 zeigt oder ähnliches hin und her. Rein den inhalt ändern ohne die "Zeiger" und ihren Zielort zu ändern.

Frage ist: wie stelle ich das am Besten an?
Die referenz, die ich mit a1 habe, die will ich ganz beibehalten und nicht verändern.
darum will auch nicht
a1=new ArrayList<Long>(temp)
schreiben weil a1 dann ja wo ganz anders hinzeigen würde als vorher
(ist ja schließlich dann eine neue arraylist, die sich wo ganz anders dann befindet im speicher als der ort auf den a1 anfangs zeigte)
kurzum, a1 und temp sollen hinterher immer noch an die selben orte zeigen, darum will ich auch nur die inhalte und eben nicht die referenzen ändern.

eine idee die ich hatte war der zweizeiler:

a1.clear();
a1.addAll(temp)

heißt ich mache die arrayliste, auf die a1 im speicher zeigt, erst mal leer und füge dann in diese wieder die elemente aus temp ein.

dadurch dürfte es kein hin und her geben dass temp plötzlich auf den selben ort wie stuple zeigt oder ähnlicher kram. (hoffe ich)

würde das so funktionieren? oder habt ihr eine andere idee wie ich den arraylist inhalt ändern kann ohne dass die referenzen/zeiger an sich verändert werden?

Computer, kopieren, Java, Speicher, Informatik, Referenz, Arraylist, Zeiger

Meistgelesene Fragen zum Thema Speicher