App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
HyperThrading/Mulitprozessor ausnutzen mit Java
- Ersteller jpwookenny
- Erstellt am
jpwookenny
Vice Admiral Special
Hi, ich habe immo an der Uni ein Programmierprojekt in Java.
Dazu wollte ich mal folgendes wissen:
Um mehrere Prozessoren des Systems auszunutzen (auch die virtuellen des P4 HT) muss ich nur alle Berechnungen in verschiedene Threads auteilen?
Möglichst viele?
Gibt es in der Art, wie man die Programme für diese Systeme schreibt einen Unterschied zwischen echten Multiprozessor Systemen und dem P4 HT?
vielen Dank, hab auch schon gegoogelt, aber nix befriedigendes gefunden
Dazu wollte ich mal folgendes wissen:
Um mehrere Prozessoren des Systems auszunutzen (auch die virtuellen des P4 HT) muss ich nur alle Berechnungen in verschiedene Threads auteilen?
Möglichst viele?
Gibt es in der Art, wie man die Programme für diese Systeme schreibt einen Unterschied zwischen echten Multiprozessor Systemen und dem P4 HT?
vielen Dank, hab auch schon gegoogelt, aber nix befriedigendes gefunden
Ja, du brauchst mehrere Threads.
Beim P4 musst du die Threads anders synchronisieren - also nicht durch zb. Warteschleifen, weil du dann nicht die CPU warten lässt die nichts zu tun hat, sondern eben die einzige vorhandene CPU.
Beim P4 musst du die Threads anders synchronisieren - also nicht durch zb. Warteschleifen, weil du dann nicht die CPU warten lässt die nichts zu tun hat, sondern eben die einzige vorhandene CPU.
PuckPoltergeist
Grand Admiral Special
Original geschrieben von intel_hasser
Ja, du brauchst mehrere Threads.
Beim P4 musst du die Threads anders synchronisieren - also nicht durch zb. Warteschleifen, weil du dann nicht die CPU warten lässt die nichts zu tun hat, sondern eben die einzige vorhandene CPU.
Threads werden grundsätzlich nicht mit Warteschleifen synchronisiert, zumindest nicht explizit. Dafür gibt es extra Mechanismen (Mutex, Semaphore...), welche das abhandeln. Wenn man einen Prozess/Thread warten lassen will, legt man ihn schlafen, und verfrachtet ihn nicht in eine Warteschleife. Das macht man weder mit echten, noch mit logischen Mehrprozessormaschinen so.
Ist ja ok - ich hab selber noch net Multithreaded geschrieben, bestand einfach nie die Notwendigkeit nach.
Die Warteschleifen waren auch eher symbolisch gemeint, eben für die verschiedenen Synchronisationstechniken. SSE3 enthält da zb. einige neue, die extra für SMT geschaffen worden (bzw. eben HT).
Die Warteschleifen waren auch eher symbolisch gemeint, eben für die verschiedenen Synchronisationstechniken. SSE3 enthält da zb. einige neue, die extra für SMT geschaffen worden (bzw. eben HT).
Crashman
Grand Admiral Special
Die Threads werden doch sowieso von der Java VM gesteuert.
MfG
MfG
nightsky99
Grand Admiral Special
- Mitglied seit
- 25.11.2001
- Beiträge
- 2.043
- Renomée
- 19
- Standort
- Wuppertal
- Mein Laptop
- Asus AJ7
- Prozessor
- Q8200 @ 3.1 Ghz
- Mainboard
- Asus P5Q
- Kühlung
- Scythe Mugen + Retention
- Speicher
- 4 x 1 GB AData Vitesta 800 xtreme
- Grafikprozessor
- Asus Radeon 5850 @ Accelero S1 Rev. 2
- Display
- HP w2228h
- HDD
- Supertalent Ultradrive 64GB SSD, WD 640GB Eco Green Platte
- Optisches Laufwerk
- LG GSA-H44 blabla
- Soundkarte
- Creative Audigy 2 ZS
- Gehäuse
- Antec P160 -voll verdämned-
- Netzteil
- BeQuiet 400W
- Betriebssystem
- Win7
- Webbrowser
- Feuerfuchs
- Verschiedenes
- Temp: , idle: 40°C , last: 50°C @ 3.1 Ghz @ 1.128V
Ist wahrscheinlich eh nicht mehr aktuell, aber da ich grade Threads in der Uni habe:
Deine Klasse muss von der Klasse Thread erben (vorher das java.awt.* importen) d.h. public class blabla extends Thread.
Dann muss du eine Methode (public void run() ) implementieren die praktisch beim Aufruf des Objekts gestarter wird.
Meist wird die ja in der main Methode gestartet, erzeugst ein Objekt von deiner Klasse und startest es mit Name.start() (wichtig!!!, es muss start heissen, nicht run)
HIER gibs mehr Infos
Allerdings weiss ich nicht wie das mit dem P4 HT funktioniert, also obs jetzt wirklch "echte" Threads sind...
Deine Klasse muss von der Klasse Thread erben (vorher das java.awt.* importen) d.h. public class blabla extends Thread.
Dann muss du eine Methode (public void run() ) implementieren die praktisch beim Aufruf des Objekts gestarter wird.
Meist wird die ja in der main Methode gestartet, erzeugst ein Objekt von deiner Klasse und startest es mit Name.start() (wichtig!!!, es muss start heissen, nicht run)
HIER gibs mehr Infos
Allerdings weiss ich nicht wie das mit dem P4 HT funktioniert, also obs jetzt wirklch "echte" Threads sind...
Ich glaube das erzeugen neuer Threads kannst du ganz einfach mit dem taskmanager kontrollieren erst VM starten und dann neue threads erzeugen, die VM sollte dann die gleiche Zahl neuer threads aufweisen. Beim beenden funktioniert das wegen dem asynchronen GC nicht. Eventuell könnte system.gc() hier helfen, genaueres wirst du aber nur von einem debugger erfahren.
Hmmm, an sich schonUm mehrere Prozessoren des Systems auszunutzen (auch die virtuellen des P4 HT) muss ich nur alle Berechnungen in verschiedene Threads auteilen?
Macht der HT nicht da auch selber einen Teil von sich aus?
Nein, ab einer bestimmten Anzahl ist der Overhead/Kommunikationsaufwand meist zu groß. Mach einfach so viele Threads wie die Proc. hast (oder einfach mal anhand eines Konkreten Problems testen - also die Anzahl der Threads langsam erhöhen).Möglichst viele?
Ja - Wenn alles auf einem Proc. geschied ist der Kommunikationsaufwand sehr klein (SMP - Shared Memory Proc.), da beide den gleichen Cache und deren Adressraum nutzen. Bei echten Multiprozessor Systemen ist es sehr viel mehr wichtig, die auszutauschenden Nachrichten gering zu halten (auch noch SMP). Am "schlimmsten" ist das ganze bei DMS (Distributed Memory Systemen), da hier die Nachrichten meist über ein sehr langsames Netzwerk (im vergleich zur Rechenzeit) geschickt werden müssen.Gibt es in der Art, wie man die Programme für diese Systeme schreibt einen Unterschied zwischen echten Multiprozessor Systemen und dem P4 HT?
Java ist (meiner Meinung nach) nicht die richtige Sprache für schnelle Multiproc. Systeme. Vielleicht erkundigst du dich besser nach OpenMP, MPI bzw. einer Kombination von beidem (wenn du mit einem Cluster an der UNI arbeiten kannst).
Was für einen SMP oder Cluster hast du den? Um welche Art von Programm handelt es sich eigentlich?
PuckPoltergeist
Grand Admiral Special
Original geschrieben von Orkomike
Hmmm, an sich schon
Macht der HT nicht da auch selber einen Teil von sich aus?
Nö, das muß man schon in Software machen. Die Hardware kann das nur schedulen.
Am "schlimmsten" ist das ganze bei DMS (Distributed Memory Systemen), da hier die Nachrichten meist über ein sehr langsames Netzwerk (im vergleich zur Rechenzeit) geschickt werden müssen.
Ist da multithreading überhaupt noch möglich? Ich meine theoretisch bestimmt, aber gibt es überhaupt Hardware, mit der das machbar ist?[/B][/QUOTE]
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 455
- Antworten
- 78
- Aufrufe
- 14K
- Antworten
- 760
- Aufrufe
- 99K
- Antworten
- 8
- Aufrufe
- 4K