Fortran, dvojtečkou moudré jazyk?

Mnozí autoři doporučují, pro dobrou kódování styl použít A (:) se odkazovat na celou řadu spíše než. Já také, a stal jsem se tak rychle zvykli této úmluvy, které jsem teď naštvaná, když se snaží číst programy, kde se nepoužívá.

No, většina lidí říká, že použití takové smlouvy nemůže škodit. Nebo snad ne?

K mému velkému překvapení, většina kompilátorů neléčíme dvě alternativy stejným způsobem při volání podprogramů. Kromě velmi mála systémů, důsledkem použití (:) místo ve volání podprogramu je zpomalení v poměru, který může dosáhnout více než 20. Ne 20%. Poměr, prakticky pracku do počítadla!

Test je jednoduchý: je třeba jen zavolat na ddot naladěn Blas v obou směrech v měření výkonnosti smyčky. A zde jsou některé výsledky se sešli s pomocí některých diskusních skupin čtenářů Comp.lang.Fortran:

Systém

Blas (A(:)/A Zpomalení poměr
Lahey LF90 2,01 g / WinNT, P90   =
SGI R8000 / IRIX 6.1 Sgimath =
NagAcef90 / Solaris 2.5 naladěný =
Nag F90 v2.2 / Všechny   = (Nyní opraveno)
Cray C94 / Unicos 9 Libsci 2.25
V5.2-dost vysoká / DEC Alpha dxml =
CVF / WinNT 4.0 - Pentium II   =
J90   3.0
xlf90 6,1 / IBM RS6000 Essl =
Nag F90 v2.1 / SunOS 4.1.3 naladěný 4.0
Sun F90 / Solaris 2.5 sunperf =
Nag F90 v2.1 / DEC Alpha dxml 11.25
HP F90 2,3 / PA 2.0 Blas =
IBM SP2 (široký uzly) Essl 23.5
MS Powerstation 4.0   nekonečno

Výše uvedené údaje jsou pořád lepší než to, co by byly získány, pokud ROZHRANÍ bloku nebyla stanovena pro ddot: zpomalení je efekt kopírování argumentu pole do provizoria, jako kdyby byly polem pododdíly. Jako vstupní pole jsou deklarovány s úmyslem (IN) atributu, jsou zkopírovány pouze jednou, před hovoru do dočasné. Pokud je záměr (IN) je atribut vynechán, kopírování dochází také zpět po ukončení hovoru, a dolů se téměř zdvojnásobil!

MS Powerstation 4.0 nebyl schopen dokončit test, protože to nevypadá, že navrátit dočasné. Množství použité paměti a tím zvyšuje smyčky je spuštěn, dokud jeden vyčerpá dostupné zdroje.

Nejsem optimalizace průvodce, přesto se domnívám, že to je docela jednoduché změnit kompilátor si to uvědomit, že (:) je nelze považovat za dílčí části pole A, ale celé pole. Doufám, že ti mnoho prodejců, kteří mají to špatně ve výše uvedeném testu rychle implementovat tuto změnu tak, aby mohla dobré praxe programování odměněni dobrým výkonem exekuce.

Je také škoda, že na standardní nebo rychlou O úroveň optimalizace a jednoduchý program bez aliasingu rizika a jasné vyjádření, že pole Trasa není upravený ve funkci, překladač by měl selhat přesunout dočasné přidělení a kopírování ze smyčky. Zlepšení na tomto druhu `` vysoké úrovni'', na rozdíl od assembleru, je optimalizace velmi potřebný.

Také bych ráda poznamenala, že společná víra je to, že optimalizace je otázkou několika málo procent, a obvykle nestojí za čas programátora s výjimkou několika velmi důležitých aplikací, jakými jsou například meteorologické prognózy modelů. Fortran 90 a poslední vývoj v oblasti systémů může učinili toto prohlášení zastaralý. Drobné změny, které mohou být provedeny během několika sekund, nyní mohou vést k dramatickému zlepšení programu výkonnosti. Například naše nejnáročnější aplikace stráví asi 50 až 80% svého času v Blas. Na systémech, které používáme, odstranění (:) poskytuje zrychlení 2-3!

Díky Ian J. Bush (IJBush@dl.ac.uk), Arnaud Desitter (NAG), Mark rosení (University of Illinois v Urbana, USA), Juha Haataja (Center for Scientific Computing, Finsko), Sune Karlsson (Stockholm School ekonomická, Švédsko), Jonathan Wheeler (Rutherford Appleton Laboratory, UK) za jejich pomoc při benchmarkingu a Stefano Baroni (Centre Européen de Calcul Atomique et Moléculaire, Francie / Scuola Superiore di Studi Internazionale Avanzati, Itálie) pro počáteční myšlenky vedoucí do těchto testů. Naladěného Blas použité v SunOS 4.1.3 a NagAce Solaris 2.5 byly poskytnuty Hans Olsson (University of Lund, Švédsko).

Pro ty, kteří by chtěli vyzkoušet sami, testovací program je k dispozici.

Original version: http://www.ifremer.fr/ditigo/molagnon/fortran90/f90col.html