Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: Rechenlast verteilen in Multikern-CPUs

  Alt 13. Mai 2008, 18:58
Zitat von BloodySmartie:
Gibts generell Kniffe, wie ich mit meinen Delphi(Win32)-Anwendungen die Vorteile von Dual/Quad - Core CPUs für mich nutzen kann?
Hi,

ich muss sagen, dass mir ein wenig der wichtigste Hinweis fehlt (zumindestens ist der nicht deutlich genug). Der einfachste Kniff um von den Vorteilen von Dual/Quad-Cores und mehreren CPUs usw. zu profitieren besteht in einem OS, dass diese unterstützt. Es ist etwas sehr einfach gedacht, wenn Du jetzt davon ausgehst, dass Du n Prozessoren (bzw. Prozessorkerne) zur Verfügung hast und n rechenintensive Aufgaben, dass Du dann einfach pro Kern einen Thread startest und die Rechenzeit somit minimiert wird (kleiner Overhead ist halt immer nötig).
Schau einfach mal nach wie viele Threads jetzt gerade auf Deinem Rechner laufen und Du wirst schnell merken, dass es immer mehr sind als Du jetzt vereinfacht angenommen hast. Andere interessante Frage, was passiert wenn Du nun zwei Cores und 3 rechenintensive Aufgaben hast?

Das Problem ist eben, dass die manuelle Zuordnung immer nur Dein Programm berücksichtigen kann (und schon das manuell bedeutet dabei fehleranfällig!). Je nachdem was noch auf dem Rechner läuft ist es eben wichtig, dass auch mal ein anderer Thread zum Zuge kommt (z.B. muss ja auch das GUI mal gezeichnet werden, gerade bei rechenintensiven Aufgaben wäre es doch nett, wenn man eine Fortschrittsanzeige hat).

Die Vorteile kannst Du einfach nutzen, in dem Du gut parallelisierbaren Code schreibst. Das ist (wie bereits gesagt wurde) gar nicht so leicht. Gerade wenn Du hier Dinge wie (Sperr-)Synchronisation berücksichtigen musst, kann schnell aus dem Geschwindigkeitsgewinn der Parallelisierung eine klare Geschwindigkeitseinbusse werden (da Synchronisation einfach mal immens viel Zeit kostet). Hast Du also wirklich unabhängige Teilaufgaben, so profitierst Du ganz automatisch von allem was heutige CPUs so zu bieten haben. Hast Du hingegen gar keinen Code, der sich dafür eignet, so solltest Du auch nicht versuchen mit Threads irgendwas zu beschleunigen. Belegst Du mit nur einem Thread auch nur einen Kern, so bleiben die anderen eben auch für andere Applikationen. So kannst Du indirekt auch Zeit gewinnen, wenn z.B. ein Virenscanner für seine Arbeit einen anderen Kern verwendet und somit einfach mehr Rechenzeit für Dein Programm zur Verfügung steht.

Wie gesagt, ist nur ergänzend zu dem schon gesagten (und hier auch zum Teil nur weiter ausführend )

Gruß,
Der Unwissende
  Mit Zitat antworten Zitat