Hardwareoptimierung unter Java

Cybered

Admiral Special
Mitglied seit
22.09.2002
Beiträge
1.625
Renomée
14
Standort
Unimatrix-Zero
Jaja, der Sinn von Java ist nicht, auf Hardware angepasst zu werden...soll portabel sein, aber ist es trotzdem möglich ???

Habe mal die Primzahlen von 1-10000 in einem Thread laufen lassen ergab ~ 170ms
Habe dann mal mit 2 Threads gearbeitet und den Bereich gesplittet, sprich von 1-5000 und von 5001-10000 in jeweil einem eigenen Thread...jetzt hat jeder Thread ~ 140ms gebraucht...ich hab allerdings nur eine Single Core CPU (Celeron M)...hat das was damit zu tun ??? Oder erzeugt das ganze zuviel Overhead, sodas ein evt. Geschwindigkeitsvorteil wieder aufgefressen wird ???

Besteht grundsätzlich die möglichkeit unter Java Hardwarenah zu programmieren ???

thx4all
Cybered
 
Durch Threads holst du dir immer einen kleinen Overhead ins Haus. Im ms-Bereich würde ich da aber nicht anfangen zu grübeln. Mach mal ein paar größere Tests (länger laufend, 10s oder so) und schau da nochmal, es sollte nicht viel langsamer sein als die Single-Thread-Version.

Was die Hardware-Optimierung angeht:
Es gibt ansich keine Hardware-Optimierung in Java, jedoch in der JVM. die JVM übersetzt den Bytecode bei vorhandenem Just-In-Time-Compiler (JIT) in CPU-optimierten Code. Dadurch kann der Java-Code teilweise schneller sein als ein unoptimierter C-Code (Hallo i_hasser :] ).

Für eine CPU wird die Threaded-Performance so gut wie immer etwas unter der Non-Threaded-Performance liegen.

Was Multi-CPU-Optimierung angeht - da gibt es ein paar Projekte, aber noch nichts Standardisiertes.

Hier noch ein paar Links zum Thema auf Theserverside.com:
http://www.theserverside.com/news/thread.tss?thread_id=44656
http://www.theserverside.com/news/thread.tss?thread_id=43607
http://www.theserverside.com/blogs/thread.tss?thread_id=43258

ansonsten such einfach mal nach java parallel computing framework oder java und multicore.
 
wie siehts aus, wenn ich mit GCJ arbeite...der bietet ja die gleichen flags wie der GCC...nutzt das was ???
Cybered
 
Mit dem gcj verschenkst du die Just-In-Time-Vorteile.

Im Endeffekt kannst du da vielleicht in ein paar Situationen ein wenig was rausholen, aber auf Kosten der Portabilität und der gcj muss alles schon vorher (blind oder mit Profiler) optimieren, während die VM mit dem JIT-Compiler zur Laufzeit auf den bestimmten Ablaufplan hin optimieren kann.

Du wirst da nicht viel rausholen, denk ich.
 
Hmmm...ich will ja nicht portabel sein...will nur mal "hardwarenah" programmieren, ohne C oder C++ etc lernen zu müßen...in Java komme ich so einigermaßen zurecht...aber mit C oder so, hab ich mich nicht befasst...daher würde ich gerne mal was "hardwarenahes" in java machen, um es dann mit der "normalen" Java-Programmierung zu vergleichen...einfach so ;)

Cybered
 
Hmmm...ich will ja nicht portabel sein...will nur mal "hardwarenah" programmieren, ohne C oder C++ etc lernen zu müßen...in Java komme ich so einigermaßen zurecht...aber mit C oder so, hab ich mich nicht befasst...daher würde ich gerne mal was "hardwarenahes" in java machen, um es dann mit der "normalen" Java-Programmierung zu vergleichen...einfach so ;)

Cybered

Das wird nicht gehen, da Java schon viel zu abstrakt ist (C++ übrigens auch). Wenn du Hardware-nah programmieren willst, musst du auch eine Hardware-nahe Sprache bemühen.
 
Java arbeitet nun mal auf einer universellen VM - und ist damit entfernt von der Hardware. Du kannst damit nicht hardwarenah programmieren, weil die VM nicht zwischen Plattformen unterscheidet. Erst der Teil, der den VM-Code in Maschinencode übersetzt (das Programm "java" mit Interpreter oder JIT-Compiler) sieht die Hardware.
 
Zurück
Oben Unten