Autor Beitrag
gerd8888
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Di 26.09.17 17:14 
Hallo,

hat jemand ein Beispiel für die Programmierung von mehreren Kernen.

Gerd
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 26.09.17 17:20 
In welcher Technik? Jede Programmiersprache/Programmierumgebung hat da üblicherweise mehrere Möglichkeiten.
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Di 26.09.17 18:28 
In der Programmiersprache Delphi. Bei einem Algorithmus heisst es doch immer - nur 1 Kern. Ich würde gerne wissen, wie man prinzipiell mehrere Kerne in der Programmierung benutzt.
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Di 26.09.17 20:19 
Ich hab letztens ein Beispielprogramm namens Threads in den Delphi Beispielen gefunden (vom Installationspaket) in dem drei Sortieralgorithmen parallelisiert verglichen werden. Ich bin mir zwar nicht sicher ob das mehrere Kerne nutzt, aber das läuft zumindest Parallel.
Einloggen, um Attachments anzusehen!
_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)


Zuletzt bearbeitet von Symbroson am Di 26.09.17 20:46, insgesamt 2-mal bearbeitet
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: Di 26.09.17 20:39 
Komponente:
Multiprocessor PCs with large cache memories are no more rare.
On this kind of machines high performance multithreading applications can be adversely affected by the default behaviour of the scheduler that often causes excessive thread process hopping.
This can be prevented using process and thread affinity masks. This component simplifies their use.

delphi.icm.edu.pl/ft...rocessorAffinity.zip

Ich habe die Komponente (Anhang) vervollständigt - aber für XE7 angepasst.
Wer eine niedrigere Version hat, muss ggf. die Prefixe entfernen.

Mehr Infos:
SetProcessAffinityMask - Select more than one processor?
stackoverflow.com/qu...e-than-one-processor

SetProcessAffinityMask function
msdn.microsoft.com/e...SPPError=-2147217396

Set processor affinity programmatically in a multi-core system
www.techrepublic.com...a-multi-core-system/
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von t.roller am Di 26.09.17 23:13, insgesamt 4-mal bearbeitet
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Di 26.09.17 21:20 
Symbroson, das war ein nettes Beispiel. Ist das parallel auch schneller wie normal?
t.roller, den source-code habe ich nicht verstanden. Wohl etwas für Profis?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Di 26.09.17 21:28 
Das weiß ich leider nicht - das musst du wohl oder übel selbst in deinem Anwendungsbereich ausprobieren. Ich kann es jetzt gerade nicht testen.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Mi 27.09.17 14:58 
Hallo,
user profile icongerd8888 hat folgendes geschrieben Zum zitierten Posting springen:
Symbroson, das war ein nettes Beispiel. Ist das parallel auch schneller wie normal?

die Frage ist so pauschal nicht zu beantworten, weil da viele Aspekte rein spielen.

Generell, ist es schon schneller, wenn mehrere Teile des Codes Paralel ausgeführt werden. Es bedeutet aber immer auch einen gewissen Verwaltungsaufwand. Benötigt diese Verwaltung der Parallelen Codeschnipzel mehr zeit, als durch die paralele Ausführung gespart wird, dann wird es sogar langsamer. Auch hat man es immer wieder mit begrenzten Resourchen zu tun, welche die Paralelen Programmteile sich teilen müssen. Stelle dir vor, zwei Programmteile wollen etwas ausdrucken, dann hilft es gar nciht wenn diese Parallel laufen, wenn nur ein Drucker da ist.
Auch kommt es immer dann zu Verzögerungen, wenn ein Programmteil mit dem anderen "sprechen muss" bzw. Daten übertragen, da die beiden sich dann immer abstimmen müssen, wann wer ansprechbar ist usw.

In C# gab es mitlerweile einige Anläufe von Microsoft um Parallele Programmierung, sowohl möglichst einfach, möglichst Sicher und möglichst effizient zu ermöglichen. Bei den neueren sagt man dem Compiler eigentlich nicht mehr "führe Parallel aus" sondern eher "führe Parallel aus wenn es sich lohnt". Mann lässt dann also ein Programm bewerten, ob es sich für dieses Programmstück auf dem aktuellen System überhaupt Lohnt einen eigenen Thread zu eröffnen oder ob es nicht schneller ist diesen Code Seriell auszuführen. Das System prüft dann auch z. B. welcher Kern, wie stark ausgelastet ist und sorgt dann dafür das der neue Thread nach Möglichkeit auf den Kern zur Ausführung gelangt, der am meisten Luft hat usw.

Ich will damit nur zeigen, dass das Thema sehr komplex ist und solche Fragen wie deine nicht in dieser Pauschalität beantwortet werden können.
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mi 27.09.17 15:03 
Deswegen ja ^^
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
das musst du wohl oder übel selbst in deinem Anwendungsbereich ausprobieren.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Mi 27.09.17 19:04 
doublecross, das Beispiel mit nur 1 Drucker verstehe ich. Mehrere Rechenprozesse dürften hingegen parallel gut zu verarbeiten sein.
Vielleicht werde ich tatsächlich mal das Beispielprogramm umschreiben und die Zeit messen.
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mi 27.09.17 20:05 
Hallo,

hier hatte ich mal ein kleines Beipiel gemacht, um die Rechenzeiten zu vergleichen.

Minimale "sinnvolle Größe" eines Thread

Gruß
Guaack

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mi 27.09.17 21:11 
user profile icongerd8888 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

hat jemand ein Beispiel für die Programmierung von mehreren Kernen.

Gerd


Es werden nicht Kerne prorammiert, sondern Threads. Diese werden von Windows nach eigenem Gutdünken auf die Prozessoren bzw. Kerne verteilt. Es lassen sich allerdings auch Prozessoren bzw. Kerne ausschließen, sowohl bei den Threads als auch bei den Prozessen.

Bei Luckie findet man unter michael-puff.de/Prog...ng/Delphi/Tutorials/ sowohl Anleitungen als auch Beispielprogramme auch zur Threadprogrammierung unter Delphi. Auch in meinem "Sortierkino" gibt es Multithreadingalgorithmen. Die Verteilung der Threads und Prozesse läßt sich mit meinem Programm "Prozesse (Prozeßbetrachter und mehr)" einschränken.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mi 27.09.17 21:36 
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab letztens ein Beispielprogramm namens Threads in den Delphi Beispielen gefunden (vom Installationspaket) in dem drei Sortieralgorithmen parallelisiert verglichen werden. Ich bin mir zwar nicht sicher ob das mehrere Kerne nutzt,


Zumindest gibt es in dem Beispielprogramm (was unter Delphi 2 schon so alles möglich war!) keine Befehle zum Setzen (auch nicht zum Lesen) der Prozeß- und/oder Threadaffinität. Also dürfte Windows mit großer Wahrscheinlichkeit die Threads auf die Ressourcen verteilen, sofern es mehr als einen Prozessor(kern) gibt.

user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
aber das läuft zumindest Parallel.


Leider bei heutigen Prozessoren zu schnell. Der Taskmanager zeigt jedenfalls zu keinem Zeitpunkt 4 Threads an, und die müßten es im Maximalfalle sein.