# Geschwindigkeit Fortran und Java



## Osix2000 (6. Nov 2007)

Hallo,

Eine Frage, was meint ihr zum Vergleich Fortran und Java....

Macht es Sinn eine naturwissenschaftliche Berechnung in Fortran nach Java umzuschreiben ?

Ja, klar, ich weiß, daß man das nicht so pauschal beantworten kann. 

Es geht halt, um ein dreidimensionales Feld mit einigen hunderttausend Zellen, die bearbeitet werden müssen.

Das Fortran Programm ist "gewachsen" und recht chaotisch...

Aber dennoch: Ich erinnere mich ans Studium wo es hieß, das Fortran zwar veraltet, aber eine sehr effiziente Sprache sei, und superschnell bei Berechnungen, weil der Code sehr Assembler nah ist.

Kann Java nicht einschätzen, wie schell das ist bei Rechenoperationen und natürlich auch schleifen und if abfragen...

Ob ich da viel mit Objekten machen kann ist schwierig, ich würde das eher fast "prozedural" nachprogrammieren...

Hat jemand eine Idee, oder weiß was dazu ?


----------



## Marco13 (6. Nov 2007)

Sumbjektiv-Unfundiertes Gelaber:

Schneller wird es dadurch vermutlich erstmal nicht. Ob es "Sinn macht", kann man schwer sagen - zumindest wäre so ein Umschreiben ja vielleicht ein Anlaß, das ganze neu zu strukturieren und zu optimieren, so dass eventuelle Vorteile durch den "besseren" Code entstehen. Aber es "so-wie-es-ist" einfach stupide runter-abzutippen, und jedes Fortran-Statement 1:1 in ein Java-Statement zu übersetzen ... höm. Würde ich mir wohl nicht antun ....


----------



## osix2000 (6. Nov 2007)

mit "nachprogrammieren" meinte ich ja nicht EXAKT, jede zeile nachprogrammieren...für alle 13-jährigen muß ich das noch dazusagen 

Sondern schon zu schauen, wo man was effizienter gestalten kann, aber alle subroutinen zu übernehmen...


----------



## maki (6. Nov 2007)

> aber alle subroutinen zu übernehmen...


Seit wann gibt es in Java "subroutinen"?

So wie sich das anhört, versuchst du dann wirklich die prozedurale Struktur von Fortran in Java abzubilden, und dass geht schief, immer.

Also: Entweder komplett neu aufsetzen und ein OO Konzept entwerfen, das die festgestellten Anforderungen erfüllt, oder ganz bleiben lassen.

Performance wird ja wohl kaum ein Kriterium für eine Portierung sein, oder?
Meist will man damit etwas altes neu strukturieren.


----------



## Marco13 (6. Nov 2007)

Nun. Man kann auch in Java prozedural programmieren. Ob man das nun "subroutine" oder "private static final synchronized void"-Methode nennt ist wurscht. Was daran "schief gehen" soll ist mir nicht ganz klar. Man kann natürlich alles 1:1 übernehmen, oder bestimmte Dinge anders strukturieren. Wenn es reines Numbercrunching ist, wird Fortran erstmal sicher schneller sein. Wenn das, was dort berechnet wird, sich irgendwie in ein _sinnvolles_ Obektorientieres Konzept packen läßt (d.h. OHNE Klassen wie "ComputationInput" und "ComputationOutput"), wäre eine Portierung vielleicht nicht verkehrt, weil schönerer, wartbarerer Code dabei entsteht. Was besser ist (oder wie groß die Vor/Nachteile sind) kann man so erstmal nicht sagen. 

Übrigens fände ich es ziemlich blöd, jedes Jahr meinen Nicknamen ändern zu müssen.


----------



## maki (6. Nov 2007)

Marco, 

wenn du mal "Java" Code liest, der von Leuten geschrieben wurde die nix mit OO am Hut haben und die dachten, man könne das wie in C++ machen, also einfach C schreiben, wirst du wissen was ich meine 

Unwartbar, unverständlich, nur sehr schwer falls überhaupt zu verändern... das meine ich mit schiefgehen.

Das man bei diesen dünnen Fakten gar keine Aussage machen kann was schneller ist, ist klar.

Nebenbei bemerkt wird "Performance" von vielen Leuten in ihrer Wichtigkeit überschätzt


----------



## Marco13 (6. Nov 2007)

Jo. Wenn man objektorientiert programmiert, dann verwendet man Klassen. Umgekehrt gilt die Implikation NICHT. Das ist mir klar. Aber da man nicht weiß, worum es geht, ist nich klar, inwiefern eine Umstrukturierung möglich, gewünscht oder sinnvoll ist....


----------



## nebulo (6. Nov 2007)

Ich denke auch es macht keinen großen Sinn, dass Programm prozedural auf Java zu portieren. Wenn dann sollte man die Anforderungen aus dem Fortran-Programm ableiten und ein Objektorientiertes Design entwerfen. Das ist ein großer Aufwand der sich nur lohnt wenn das Programm weiter gewartet und erweitert werden soll. Dabei sollte dann falls nicht vorhanden eine genaue Spezifikation und ein programmiersprachenunabhäniger Entwurf erstellt werden.

Ich gebe maki im übrigen Recht das sehr häufig Performanz überschätzt wird und dagegen Wartbarkeit (Portabilität, Änderbarkeit, und auch Prüfbarkeit) und Bedienbarkeit oft unterschätzt werden.


----------



## Osix2000 (7. Nov 2007)

Es geht aber hier um wissenschaftliche Rechnungen.... "Numbercrunching" ja, einige dreidimensonalen Felder (100 x 100 x 100) an denen was berechnet werden soll... da wird differnziert, integriert und noch andere mathematische Operationen verwendet... Vektor-Faltungen, die in Subroutinen ausgelagert sind.

Da läßt sich nicht so einfach ein sauberes Objektmodell entwerfen...
Andererseits kann man mit der Komfortabilität von Java einiges eleganter machen als in Fortran, und ich frage mich
halt, wie effizient das wird.

Wir würden es ja in Fortran lassen, aber es soll eine webfähige Anwendung werden...
Da bleiben zwei Möglichkeiten.... Ein Wrapperframework drumrumstricken (Es sind mehrere einzelne Fortranprogramme, die sich ganz altmodisch über ASCII-Dateien austauschen) oder die einzelnen Programme gleich in Java neu schreiben.

Geschwindigkeit ist ebenfalls höchste Priorität, deshalb meine Frage...

@marco: Soso, dann bist Du also 1913 geboren  Auch nicht schlecht. Ein 94-jähriger der Java programmiert...


----------



## SlaterB (7. Nov 2007)

fang doch klein an, suche dir eine abgeschlosse Teil-Operation von 100 Zeilen 
und lasse die in Fortran  + Java 1 Mio. durchlaufen um einen ganz groben Eindruck zu erhalten


----------



## Marco13 (7. Nov 2007)

Hm. Eine Matrix (bzw. ein Tensor) ist ein Objekt. Aber sowas selbst schreiben macht keinen Sinn. Dazu sollte man eher mal auf
http://math.nist.gov/javanumerics/
unter "Libraries" schauen. Dort ist übrigens auch ein Link zu einen Fortran-2-Java-Übersetzer
http://icl.cs.utk.edu/f2j/
Bei solchen automatischen Übersetungen sollte man kritisch sein, aber vielleicht hilft es, schnell und leicht einen Eindruck von der möglichen Performance zu bekommen...

EDIT: Nyehe... die FAQ dazu ist ja geil:
http://icl.cs.utk.edu/f2j/faq/index.html
 :lol:


----------



## Hurga38 (8. Nov 2007)

Ich hab den Transpiler f2j mal angelesen.

Ich verstehe aber nicht so recht, ob der alles in Fortran übersetzt oder nur die BLAS LAPACK Sachen....

Hat jemand noch einen anderen Transpiler von Fortran nach Java ?


----------

