Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programmierung von Computer mit mehreren Prozessorkernen (https://www.delphipraxis.net/86293-programmierung-von-computer-mit-mehreren-prozessorkernen.html)

Chemiker 12. Feb 2007 12:07


Programmierung von Computer mit mehreren Prozessorkernen
 
Hallo,

wenn man jetzt über die Erstellung neuer Anwendungen nachdenkt muss man sich zwangsläufig mit dem Thema Parallelisierung auseinandersetzen.
Es würde mich nun interessieren, in wieweit Delphi einem dabei unterstützen kann, oder sollte man besser auf C++ umsteigen?
Hat jemand schon Erfahrungen sammeln können mit der Programmierung von Computer mit mehreren Prozessorkernen?
Wie laufen diese Programme mit nur einem Prozessorkern?
Was ist dabei zu beachten?

Bis bald Chemiker

hoika 12. Feb 2007 12:20

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Hallo,

das Suchwort heisst Threads,
Delphi unterstützt dich hier mit TThread.
Einfach mal hier suchen.

Im allgemeinen heisst es:
Wenn die kein Multithreading-Programm brauchst,
mache erst keines.
Die Synchronisation (Mustex, Semphore ..)
hat es in sich, Thread-Fehler zu finden, kann böse sein.

Falls die ein "normales" Delphi-Programm schreibst,
hast du ein 1-Thread-Programm,
welches auch auf einem Doppelprozessorsystem normal läuft,
es nutzt dann halt immer nur einen Prozessor (gleichzeitig).


Heiko

Phoenix 12. Feb 2007 12:20

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Die Programmiersprache ist dabei nahezu vollkommen egal.

Im Prinzip musst Du nur beachten, dass Du in verschiedenen Threads eben parallel arbeitest und diese sauber Synchronisierst. Die TThread Klasse hilft Dir da sogar bei, bei C++ ist das etwas aufwändiger (eigenes Speichermanagement bei Threadsynchronisierung ist etwas, dass ich nur ungern selber machen möchte - da nehm ich lieber eine Plattform die mir das zum Teil abnimmt, also z.B. Delphi mit TThread oder eben eine .NET - Sprache).

Was passiert wenn die Anwendung auf einem Single-Core läuft ist damit eigentlich auch schon beantwortet: Der einzelne Kern wird zwischen den laufenden Threads umschalten und sie eben Stückweise 'virtuell Parallel' nebeneinander her ausführen. Physikalisch rechnet die CPU dabei natürlich immer nur Teile der einzelnen Threads hintereinander durch.

Durch dieses Umschalten zwischen den Threads hast Du bei einem einzelnen Kern natürlich einen gewissen Overhead, der auch Performance kosten kann - und bei überaus vielen Threads definitiv auch wird.

Bei richtiger Parallelisierung achtet man daher darauf, die Anzahl der verwendeten Threads nicht hardcoded festzulegen, sondern die Anzahl der parallel abzuarbeitenden Aufgaben mit den verfügbaren Kernen mit zu skalieren und eben dynamisch bei Bedarf einzelne Threads zu starten.

hsg 12. Feb 2007 12:21

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Es kommt auf das darunterliegende Betriebssystem an.

Windows nutzt mehrere Prozessoren um Threads auf verschiedene Prozessoren auszu"lagern", d.h. wenn dein Programm mehrere Threads benutzt, gewinnt es an Geschwindigkeit. Bei nur einem Prozessor( -Kern) dementsprechend langsamer, da Windows mehr zu tun hat die verfügbare Prozessorzeit auf die gewünschte Anzahl Threads zu verteilen (Thread stoppen, ggf. auslagern, neuen Thread laden und anstossen; das braucht einfach Zeit)


Tritz roten Kasten abgesendet, auch wenn nicht viel neues drin steht....

Chemiker 12. Feb 2007 13:48

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Hallo,

danke für die Antworten.
Ich habe bisher die Thread - Programmierung nur eingesetzt, damit der Anwender nicht auf das Programm warten muss, z.B. beim Übertragen von Daten auf einer seriellen Schnittstelle, oder bei einer umfangreichen Abfrage einer Datenbank(Inventur).

Jetzt will man aber doch die Möglichkeiten der mehreren Prozessorkernen nutzen um das Programm insgesamt schneller zu machen.
Ich müsste doch die Anzahl der vorhandenen Kerne feststellen und dann für die Abarbeitung genauso viele Threads erstellen.
Eigentlich müsste doch jede Schleife geprüft werden ob sie parallel abgearbeitet werden kann oder?


Bis bald Chemiker

Elvis 12. Feb 2007 14:01

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Ich kann dir da mal AsyncCalls empfehlen. Habe es selbst im Einsatz und es macht Multithreading und das Zusammenführen von Threads sehr einfach und elegant. :-)

Da Andy Delphis Referenzzählung für Interfaces für seine(bzw deine :zwinker: ) Zwecke verwendet, kannst du einfach innerhalb einer Method x Threads losfeuern und beim Verlassen der Methode wird der Thread der Methode solange blockiert bis alle Threads fertig sind.
So kannst du sehr easy kleine Aufgaben auf mehrere Kerne aufteilen ohne dass sich die Threads außerhalb der Methode bemerkbar machen. Oder anders ausgedrückt, damit ist es einfach eine bestehende Anwendung für Multithreading aufzuwerten.
Es geht natürlich noch viel mehr damit. :)

hoika 12. Feb 2007 14:44

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Hallo,

da wird es schon wieder kompliziert ;(
Kann ich mir dieser Lizenz den ungeänderten Quellcode
in kommerziellen Programmen benutzen ?


Heiko

Elvis 12. Feb 2007 15:15

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Zitat:

Zitat von hoika
da wird es schon wieder kompliziert ;(
Kann ich mir dieser Lizenz den ungeänderten Quellcode
in kommerziellen Programmen benutzen ?

Kurz: Ja
Aber da ich mich hier nicht für etwaige Probleme haftbar machen will: Übersetzung der MPL für Nicht-Anwälte

hoika 12. Feb 2007 15:59

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Hallo,

Clearly in this way a company could add closed source components to an MPL-licensed work and thus build a proprietary product.


das isses.
Ich kann den Code also benutzen in closed source.


Heiko

Chemiker 12. Feb 2007 17:18

Re: Programmierung von Computer mit mehreren Prozessorkernen
 
Hallo,

Zitat:

Zitat von Phoenix
Im Prinzip musst Du nur beachten, dass Du in verschiedenen Threads eben parallel arbeitest und diese sauber Synchronisierst. Die TThread Klasse hilft Dir da sogar bei, bei C++ ist das etwas aufwändiger (eigenes Speichermanagement bei Threadsynchronisierung ist etwas, dass ich nur ungern selber machen möchte - da nehm ich lieber eine Plattform die mir das zum Teil abnimmt, also z.B. Delphi mit TThread oder eben eine .NET - Sprache).

ich habe hier eine Anzeige vom INTEL C++ Compiler vorliegen. Dort sind aber einige Funktionen vorhanden, die es so bei Delphi nicht gibt:
Thread Profiler, Thread Checher, Autoparallelisierung usw.

Ob es dadurch einfacher wird Threaded-Anwendungen zu schreiben weis ich natürlich nicht.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz