Menü
Avatar von Angry Old Man
  • Angry Old Man

mehr als 1000 Beiträge seit 24.07.2011

Re: Geht mir mit Java so

Bitschnipser schrieb am 21.05.2019 20:07:

Angry Old Man schrieb am 21.05.2019 17:36:

Mit Juice wurde schon vor vielen Jahren ein Forschungsprojekt auf die Beine gestellt, das die automatische Optimierung des Speicherlayouts (auch und gerade im Hinblick auf Cache-Lokalität!) erforschte. Langfristig dürfte eine manuelle Anpassung keine Chance auf konsistenten Performancevorteil haben: solche "Stellschrauben" funktionieren am besten unter der Ägide eines guten Algorithmus, der das System zur Laufzeit im Blick hat.

Wie erfolgreich sind diese Systeme denn - sind die bereits im Einsatz?

Das war ein Forschungsprojekt - ich meine Andeutungen gehört zu haben, daß man bei Graal darauf zurückgreifen will. Bei Hotspot war es vermutlich nicht so.

Bei Sprachen, die massive auf Value-Objekte setzen (Haskell) wird sowas ja schon seit Jahren sehr agressive gemacht (da geht das auch), aber bei einer imperativen Sprache wie Java stelle ich mir das wegen der Aliasing-Problematiken doch sehr schwierig vor.

Trotzdem wurde Juice für die JVM gemacht, Javas Hochsprachensyntax war nicht das Problem (ohnehin ist die JVM nicht Java). Speicherlayoutoptimierung hat ja mit Aliasing gar nichts am Hut.

Die Fortschritte zwischen ersten und späten Versionen von Juice waren übrigens beachtlich, diese Technik hat Potential, ist nur ein wenig wenig bekannt und imho vernachlässigt worden (aber zwischen ersten Videorekordern "im Labor" und dem Erfolg von VHS lagen ja auch viele Jahre).

Andererseits: Bei C++ versenken sie seit Jahrzehnten Personenjahrhunderte in die Aliasanalyse...

Aus anderen Gründen - nicht wegen des Layouts der Objekte im Speicher.

Naja, das ist ein neuer Datentyp, den müßte man halt einbauen. Am einfachsten wird sein, die Grundrechenarten von Hand in Assembler zu schreiben und das von der Hochsprache aus aufzurufen.

Du kriegst das aber nicht als primitiven Datentype.

Assembler und von Hand wäre schon "sehr nativ" ;)

...noch den Overhead für die Übergabe zwischen Java und C bzw. Assembler.

Naja, es kommt immer drauf an - es kann schon manchmal Sinn machen, umso mehr je mehr Bits und je komplexer die Rechenoperationen.

Wie aber sieht's aus, wenn man das z.B. in C schreibt und per Graal/Truffles umsetzt? Da gäbe es die Java-übliche "Trennscheibe" JNI nicht.

Natürlich will man mehr als die Grundrechenarten!
Wenn es nur um die ginge, könnte man auch gleich LongInteger nehmen und bräuchte sich nicht auf 128 Bits beschränken. Aber LongInteger ist halt langsam.

Wofür braucht man eigentlich solche "rasend schnellen" weil low levelige Superlong-Integers? Was wäre das für ein Anwendungsfall? Ich kann mir darunter nichts vorstellen.

Bewerten
- +
Anzeige