-
Ritter
Ich bin mir nicht sicher wie genau eine solche Schleife bei Parallelisierung auf einem 2-CPU-System abgearbeit wird, aber mein Tipp wäre, daß es bei der abwechselnden Variante (1 Prozessor ungerade, der andere die geraden Indizes) zur Überlappung beim Speicherzugriff kommt, da aufgrund des Shared Memorys beide Prozessoren denselben Speicherbereich bearbeiten.
Das Problem hierbei ist:
Wenn Prozessor1 gerade den Wert von A[i] in den Speicher schreibt kann Prozessor2 zurselben Zeit nicht den Wert von A[i+1] auslesen und muss warten bis Prozessor1 mit dem Schreiben fertig ist. (Da Prozessor1 die "Leitung" zum RAM blockiert)
Arbeiten beide CPUs auf einem jeweils festem Bereich des Arrays ist es vorstellbar, daß der C-Compiler entsprechend optimiert und die zu bearbeitenden Segmente des Arrays jeweils in großen Brocken im Cache des Prozessors zwischengespeichert werden. Dadurch können beide Prozessoren gleichzeitig große Teile des Arrays bearbeiten ohne sich beim Speicherzugriff in den Weg zu kommen.
Beim Einkernprozessor ist es vermutlich ebenso die fehlende Optimierung über den Cache die zu einer minimalen Verlangsamung führt, da die CPU bei jedem durchlauf zwischen "lesen" und "schreiben" hin und herschalten muss anstatt einmal einen großteil in den Cache laden und später einmal große Datenmengen aus dem Cache in den RAM schreiben.
Bei einem sehr großen Array kann sich dieser minmale Zeitverlust vermutlich zu bemerkbaren Verzögerungen aufsummieren.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln