Dual Core CPUs programmieren



  • Hi!
    Hat jemand von euch vielleicht ein gutwes Tutor zur Dual Core-Programmierung?

    Danke im Vorraus



  • Ein Thread-Tutorial reicht!



  • Ich weiß ja nicht auf welchem Level du programmieren willst. Aber du hast schon
    mal einen großen Schritt getan, wenn du deinen Prozess auf zwei Threads auf-
    teilst, die ca. die gleichen CPU-Resourcen brauchen.

    Ansonsten gibt es auch Bibliotheken, die einem dabei helfen. z.B. OpenMP.



  • Das Betriebssystem sorgt dafür das die beiden Cores bedient werden, in dem man Multithreading in seinem Programm benutzt. Das ist auch einer der Gründe, warum nur wenige Programme wirklich von einem Multi-CPU/-Core System profitieren. Die meisten Programme haben ja "nur" einen Thread.



  • Die meisten Programme haben ja "nur" einen Thread.

    die wenigsten



  • geht am besten mit openMP finde ich.

    rapso->greets();



  • tipp schrieb:

    Die meisten Programme haben ja "nur" einen Thread.

    die wenigsten

    unter windoof gar keines 😉



  • net schrieb:

    tipp schrieb:

    Die meisten Programme haben ja "nur" einen Thread.

    die wenigsten

    unter windoof gar keines 😉

    ??



  • Die BS teilen das selbst auf.
    Windows teil hier jedoch anderes auf als Linux.



  • Es gibt schcon ein paar Windows Multithreaded Programme, aber das sind dann nur Renderproramme oder Encodingprogramme. Spiele gibt es bis jetzt noch garkeine.

    Zarniwoop



  • jedes auf Java basierendes Programm ist Multithreaded.



  • jaja, ganz toll 😃

    hat nun einer mal eine Adresse zu einem Tut über Threading?
    Hochinteressantes Thema...
    Hab da zwar zwei von Kelvin Henney
    Hier
    und Hier
    aber den Durchblick hab ich daraus nicht erlangt ^^



  • DEvent schrieb:

    jedes auf Java basierendes Programm ist Multithreaded.

    aber da läuft dann nur so'n scheiss wie garbage collection...



  • DEvent schrieb:

    jedes auf Java basierendes Programm ist Multithreaded.

    Ja, aber das heißt noch lange nicht, dass diese Programme einen zweiten Prozessorkern oder einen zweiten Prozessor auch sinnvoll ausnutzen. Threads wie der GC-Thread oder der GUI-Thread brauchen nur sehr wenig Leistung und nutzen im Normalfall zusammen nicht einen Kern komplett aus. Nur, dass hier keine Mißverständnisse entstehen. Es ist nicht so, dass Java automatisch irgendwelche Dinge parallelisiert oder so. Dafür muss man auch in Java explizit mehrere Threads erzeugen, die sich die Berechnung aufteilen. Aber hier wird einem zumindest von der Sprache her kein Stein in den Weg gelegt. Es sind alle Grundlagen da, die man braucht, um seine Programme zu parallelisieren.

    BTW: Warum ist eigentlich immer die Rede davon, seine Berechnungen auf 2 Threads aufzuteilen? Wäre es nicht viel sinnvoller, deutlich mehr Threads zu nehmen? 100 oder so? Wenn man von 2 Threads ausgeht, dann macht man doch die Annahme, dass einem beide Kerne zu 100% zur Verfügung stehen. Wenn man die Kerne hier mit anderen Programmen teilen muss, dann kann man mit 2 Threads nicht die maximal mögliche Leistung herausholen. Außerdem könnte das Programm ja auch einmal auf einem Rechner mit 4 oder noch mehr Kernen zum Einsatz kommen. Ich denke, dass es besser ist, seine Berechnungen auf viele Threads aufzuteilen, von denen man immer so viele laufen läßt, wie Kerne zur Verfügung stehen. Wenn einer durchgelaufen ist, wird halt immer ein neuer gestartet, bis die Berechnung fertig ist. Oder macht das wegen der nötigen Synchronisierung deutlich mehr Aufwand?



  • Zarniwoop schrieb:

    Es gibt schcon ein paar Windows Multithreaded Programme, aber das sind dann nur Renderproramme oder Encodingprogramme.

    So ein Unsinn. Praktisch jedes halbwegs ernstzunehmende Programm hat mehrere Threads. Oder was denkst du, wie Word die Rechtschreibungsprüfung, WinRAR die Dateikompression, DaemonTools mehrere Laufwerke, Firefox mehrere Tabs, ein Antivirenprogramm mehrere Überwachungsaufgaben, Winamp und Media Player das Musikabspielen und das User-Interface gleichzeitig, deine Entwicklungsumgebung das Nebenher-Kompilieren, CodeInsight etc. und Nero das Brennen und die Benutzerkommunikation zugleich handhaben?

    Moritz



  • Ok, das eas ganz soviele gibt dachte ich jetzt auch nicht, war jetzt vor allem mal als Reaktion zu net gedacht, der geschrieben hat, dass es unter win garkeine solchen Programme gäbe. Aber Leistungskritische Programme wie Spiele(welche man natürlich je nach Einstellung zu den weniger ernstzunehemenden Programmen zählen kann) haben im Moment allermeistens nur einen Thread.

    Zarniwoop



  • Zarniwoop schrieb:

    Ok, das eas ganz soviele gibt dachte ich jetzt auch nicht, war jetzt vor allem mal als Reaktion zu net gedacht, der geschrieben hat, dass es unter win garkeine solchen Programme gäbe. Aber Leistungskritische Programme wie Spiele(welche man natürlich je nach Einstellung zu den weniger ernstzunehemenden Programmen zählen kann) haben im Moment allermeistens nur einen Thread.

    Zarniwoop

    Im Task-Manager werden aber meistens so 10 Stück angezeigt. Aber ich hab gehört die kommen von DirectX oder den Treibern?!



  • audacia schrieb:

    Zarniwoop schrieb:

    Es gibt schcon ein paar Windows Multithreaded Programme, aber das sind dann nur Renderproramme oder Encodingprogramme.

    So ein Unsinn. Praktisch jedes halbwegs ernstzunehmende Programm hat mehrere Threads. Oder was denkst du, wie Word die Rechtschreibungsprüfung, WinRAR die Dateikompression, DaemonTools mehrere Laufwerke, Firefox mehrere Tabs, ein Antivirenprogramm mehrere Überwachungsaufgaben, Winamp und Media Player das Musikabspielen und das User-Interface gleichzeitig, deine Entwicklungsumgebung das Nebenher-Kompilieren, CodeInsight etc. und Nero das Brennen und die Benutzerkommunikation zugleich handhaben?

    Moritz

    Nunja aber alle die hier genannt sind profitieren so gut wie gar nicht von einem DualCore-System weil der eine Thread die ganze CPU-Last hat und der andere das GUI.



  • ink3n schrieb:

    jaja, ganz toll 😃

    hat nun einer mal eine Adresse zu einem Tut über Threading?

    http://www.kharchi.de/threads.html

    Muß ich demnächst nur noch mal erweitern.



  • Zarniwoop schrieb:

    Aber Leistungskritische Programme wie Spiele(welche man natürlich je nach Einstellung zu den weniger ernstzunehemenden Programmen zählen kann) ...

    So war das nicht gemeint 🙂

    Zarniwoop schrieb:

    ... haben im Moment allermeistens nur einen Thread.

    Sind denn Kompressionsprogramme, Compiler, Renderer, Encoder etc. keine leistungskritischen Programme?

    Die einzigen ernstzunehmenden Singlethreaded-Programme, die mir momentan einfallen, sind tatsächlich nur Spiele, was allerdings nicht davon abhängt, daß sie leistungskritisch sind, sondern davon, daß der Benutzer stetig mit ihnen in Kontakt steht und nebenher kein anderes Programm benutzt (da fällt mir gerade der Intel-Typ ein, der auf der Cebit zu den Gamern meinte, mit Dual-Core-CPUs könnten sie ohne Performanceverlust zwei Spiele gleichzeitig spielen :D), und daß jede anfallende Berechnung direkt von einer Aktion des Benutzers abhängt.

    Moritz


Anmelden zum Antworten