2010-12-30 8 views
1

Ich habe eine Array-Initialisierung basierend auf einer impliziten do-Schleife, mit einer ungeraden Größe N.Sind implizierte DO-Schleifen ineffizient?

J=(N+1)/2 
XLOC(1:N) = (/ (I-J, I=1,N) /) 

Im Rahmen der F90 + ist es, die (/ .. /) Syntax oder ist effizienter zu verwenden, um eine FORALL Anweisung zu verwenden empfohlen.

Beispiel: für N=19 dann XLOC=(-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9)

Wie sonst würden Sie dieses Array initialisieren?


Edit 1

Wie würden Sie dieses Array mit lesbarem Code initialisiert werden?

Antwort

2

Für solch ein einfaches Konstrukt führen beide wahrscheinlich zum gleichen Code, weil Compiler gut zu optimieren sind. Die FORALL-Anweisung ist nicht so sehr eine Schleifenanweisung, sondern eine Initialisierungsanweisung, die viele Einschränkungen aufweist, die Optimierungen verhindern können. Wenn eine einfache Schleife funktioniert, würde ich sie verwenden.

Auch diese vorherige Antwort sehen: Do Fortran 95 constructs such as WHERE, FORALL and SPREAD generally result in faster parallel code?

2

Es gibt keinen Grund sollten sie weniger effizient sein, dass die tatsächlichen Schleifen tun. Wenn Sie einen Fall finden, in dem sie sich befinden, melden Sie dies als Fehler bei der Optimierung Ihres Compilers!