Weiß jemand, warum Program B
schneller als Program A
ist?Zweimal Schleifen 1D mit verschiedenen Konfigurationen
benutzen ich ifort-16
mit -fast
Optimierung Flagge und die Optimierung Berichte sagen, dass Program A
geschätzte mögliche Geschwindigkeit 10.09 bis geben würde, während Program B
nur 3,90. Aber eigentlich ist die Laufzeit von Program B
14s, während Program A
20s ist.
!Program A
DO J=1, 100000 !This is the different part
!$OMP SIMD
DO I=1, 100000
IF(A(I)==J) THEN
B(I)=J
END IF
END DO
!$OMP END SIMD
END DO
!Program B
DO I=1, 100000 !This is the different part
!$OMP SIMD
DO J=1, 100000
IF(A(I)==J) THEN
B(I)=J
END IF
END DO
!$OMP END SIMD
END DO
Nun wurden beide Programme erfolgreich vektorisiert und irgendwie sagt mein Gefühl, dass program A
schneller sein würde, da (meiner Meinung nach) würden beide Codes vektorisiert werden, wie folgt:
!Program A
IF(A(I)==J) THEN
B(I)=J
END IF
IF(A(I+1)==J) THEN
B(I+1)=J
END IF
...
und
!Program B
IF(A(I)==J) THEN
B(I)=J
END IF
IF(A(I)==J+1) THEN
B(I)=J+1
END IF
...
wo Program A
effektiver, ein seit den linken seitigen Indizes werden re direkt berechnet. Aber tatsächlich waren meine Erwartungen falsch. Danke im Voraus.
Danke für die Antworten. Eigentlich dachte ich zuerst auch so. So besteht die Möglichkeit des Hauptproblems hier im Speicherzugriff. Ich habe es noch nicht mit 'Gfortran' getestet, aber hoffentlich bekomme ich dieselben Ergebnisse (Perspektiven), da manchmal' Ifort' und 'Gfortran' die verschiedenen Eigenschaften auch für einige einfache und grundlegende Probleme geben können. –
Nur eine Seite dachte, Sie sollten in der Lage sein, eine Schleife zu beseitigen. Die beiden scheinen nicht notwendig zu sein. – innoSPG
Ja sicher, ich brauche diese 2 Schleifen nicht. Alle Codes, die ich hier gepostet habe, sind nur ein paar einfache Beispiele, mit denen ich die Eigenschaften von 'Ifort' und' Gfortran' kennenlernen möchte. –