Leistungsbewertung und Profiling
Misst man die Zeit je Element beim wiederholten Lesen eines Arrays bei schrittweise wachsender Arraygröße, steigt die Zeit bei bestimmten Größen stufenweise an. Welche Begründung ist richtig?
- AWeil die CPU-Frequenz bei größeren Arrays stets sinkt
- BWeil Daten jedes Mal, wenn das Array die Kapazität von L1-, L2- und L3-Cache nacheinander überschreitet, aus einem langsameren Speicher gelesen werden
- CWeil sich das Ergebnis von Additionen mit der Arraygröße ändert
Antwort und Erläuterung anzeigen
Antwort: B. Weil Daten jedes Mal, wenn das Array die Kapazität von L1-, L2- und L3-Cache nacheinander überschreitet, aus einem langsameren Speicher gelesen werden
Solange das Array klein ist, passt es in den L1-Cache und wird schnell gelesen; wird die L1-Kapazität überschritten, wird aus L2 gelesen, bei Überschreiten von L2 oder L3 aus dem Hauptspeicher, und jedes Mal steigt die Zeit je Element stufenweise an. Mit dieser Messweise lassen sich Cache-Kapazitäten und deren jeweilige Geschwindigkeit grob bestimmen. Es wird auch verständlich, warum es für die Leistung stark ins Gewicht fällt, die vom Programm wiederholt genutzte Datengröße (Working Set) im Cache unterzubringen.