AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programmierung von Computer mit mehreren Prozessorkernen
Thema durchsuchen
Ansicht
Themen-Optionen

Programmierung von Computer mit mehreren Prozessorkernen

Ein Thema von Chemiker · begonnen am 12. Feb 2007 · letzter Beitrag vom 13. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#1

Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 13:07
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 13:20
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#3

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 13:20
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 13:21
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....
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 14:48
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 15:01
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 ) 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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 15:44
Hallo,

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


Heiko
Heiko
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 16:15
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
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 16:59
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Programmierung von Computer mit mehreren Prozessorkernen

  Alt 12. Feb 2007, 18:18
Hallo,

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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
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