![]() |
|
|
|||
|
|||||||
| Hilfe | Registrieren | Blogs | Mainboarddatenbank | Galerie | Extras | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
![]() |
|
|
Themen-Optionen | Ansicht |
|
|
Posting #1 (im Thread / einzeln) |
|
DerVonNebenan
Commander
![]() Registriert seit: 20.08.2011
Beiträge: 171
|
Fortran unter Windows: Wie Programm sagen, welcher Kern genutzt werden soll?
Hallo,
wie sage ich einem Fortran Programm, welchen CPU - Kern verwendet werden soll? Gibt es hierbei eine bestimmte Eingabe, die es ermöglicht, zu Begin bei der Ausführung des Programmes zu sagen, welcher Kern für die Berechnungen genutzt werden soll? Speziell habe ich das Problem unter Windows, dass mein Hexa-Core CPU beim Start des Programms die Berechnung auf alle sechs vorhanden CPU´s auslagert. Ich kann zwar im Taskmanager dann das Programm auf einen bestimmten Kern manuell auslagern. Auf die Dauer gesehen geht es aber schon an die Nerven. LG edit: Oder sucht sich das Programm automatisch einen Kern aus. Genutzt wird neuerdings PGI Fortran für Windows Systeme. |
|
|
Posting #2 (im Thread / einzeln) | |
|
Dalai
Grand Admiral
Special ![]() Registriert seit: 14.06.2004
Ort: Meiningen, Thüringen
Beiträge: 5.739
|
Zitat:
Normalerweise gibt es keinen Grund, die automatische Vergabe zu ändern. Manchmal ist es aber dennoch nützlich, weil eine Software ausgebremst wird oder um Turbo-Modi der CPUs ausnutzen zu können. Dafür gibt es entsprechende WinAPI-Funktionen GetProcessAffinityMask und SetProcessAffinityMask. Ich habe diese Funktionen in einem meiner Delphi-Programme benutzt, das genau dafür da ist:automatische Zuweisung von Affinitäten an bestimmte Prozesse. Ob und wie die in Fortran zu benutzen sind: .MfG Dalai |
|
|
|
Posting #3 (im Thread / einzeln) |
|
DerVonNebenan
Commander
![]() Registriert seit: 20.08.2011
Beiträge: 171
|
Hallo,
erstmal vielen Dank. Habe mal ein bisschen im Netz gelesen. Dabei habe ich gelesen, dass wohl die neuen Absoft und PGI Fortran Compiler in der Lage sind -soweit wie ich verstanden habe-, die Quellcodes automatisch zu Parallisieren. In wie weit ich das richtig verstanden habe, muss ich morgen nochmal genau nachforschen. LG |
|
|
Posting #4 (im Thread / einzeln) | |
|
Dalai
Grand Admiral
Special ![]() Registriert seit: 14.06.2004
Ort: Meiningen, Thüringen
Beiträge: 5.739
|
Zitat:
.MfG Dalai |
|
|
|
Posting #5 (im Thread / einzeln) |
|
DerVonNebenan
Commander
![]() Registriert seit: 20.08.2011
Beiträge: 171
|
Gefunden bei der Website: http://www.qtsoftware.de/vertrieb/fo...ro-windows.htm
"... Zudem steht ein Auto-Parallelisierer und Vektor-Optimierer zur Verfügung, mit dem auf Mehrkern-Prozessoren parallelisierter Code erzeugt werden kann. ..." LG |
|
|
Posting #6 (im Thread / einzeln) |
|
ThePsycho
Vice Admiral
Special ![]() Registriert seit: 10.03.2003
Beiträge: 620
|
Diese Optimierungen erfordern aber bestimmte Voraussetzungen, die in manchem Programm vorkommen und in manchem nicht.
Wenn du ein Multi-threaded-Programm haben willst, dann solltest du auch eines schreiben, sprich Threads erzeugen und Gedanken über die parallele Abarbeitung machen. Der Compiler wird mit Sicherheit nicht deine Programmlogik über den Haufen werfen und neu codieren.
|
|
|
Posting #7 (im Thread / einzeln) |
|
PuckPoltergeist
Grand Admiral
Special ![]() Registriert seit: 18.01.2002
Ort: Ilmenau
Beiträge: 11.392
|
Wenn du per Hand parallelisierst, wird das der Compiler nicht umstoßen. Schreibst du sequentiellen Code, lässt sich das in bestimmten Ausmaßen durchaus automatisch parallelisieren. Gerade Fortran sollte da gute Voraussetzungen bieten. Mit OpenMP lässt sich das sogar recht bequem steuern.
|
|
|
Posting #8 (im Thread / einzeln) | |
|
JKuehl
Grand Admiral
Special ![]() Registriert seit: 22.06.2003
Ort: Mainz
Beiträge: 5.213
|
Zitat:
http://en.wikipedia.org/wiki/Multilevel_feedback_queue Vielleicht kannst du aber über den Time Stamp Counter was beeinflussen: http://en.wikipedia.org/wiki/Time_Stamp_Counter bzw. den QueryPerformanceCounter http://www.ccsl.carleton.ca/~jamuir/rdtscpm1.pdf EDIT : . Und wenn du nicht parallelisieren kannst, dann lass einfach das Fortran Programm x-Mal parallel laufen und führe die Ergebnisse hinterher zusammen (sofern das geht). Habe ich z.B. schon geamcht um eine sehr umfangreiche Simulation quick-and-dirty per Perl-Script auf X Cores von Y Rechnern zu verteilen. |
|
|
|
Posting #9 (im Thread / einzeln) | |
|
ThePsycho
Vice Admiral
Special ![]() Registriert seit: 10.03.2003
Beiträge: 620
|
Zitat:
Gibts Messungen oder sowas dazu (aus Neugier, finde ich interessant, obwohl ich nach wie vor sehr skeptisch bin)? |
|
|
|
Posting #10 (im Thread / einzeln) | |
|
PuckPoltergeist
Grand Admiral
Special ![]() Registriert seit: 18.01.2002
Ort: Ilmenau
Beiträge: 11.392
|
Wenn zum Beispiel in einem Programm in zwei Schleifen zwei voneinander unabhängige Werte berechnet werden, lässt sich das automatisiert in zwei Threads verpacken. Wie gesagt, mit OpenMP gibts dafür auch eine Beschreibung, mit der man den (OpenMP-fähigen) Compiler darauf hinweisen kann. Das läuft in die ähnliche Richtung wie Autovektorisierung. Und die funktioniert auch vollkommen unabhängig.
Zitat:
|
|