Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
25. Jul 2023
Also damit braucht er mit egal wievielen Threads immer annähernd gleich lang (bisschen overhead)
Ist aber doppelt so schnell wie wenn sich die verschiedenen Kerne den Cache ständig ungültig machen.
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Hab jetzt nur zum Gegencheck den Ransom ähmm Random als lokal funktion eingebaut
procedure internalExecute;
var
i : integer;
x : Byte;
dummy : int64;
RandSeed : integer;
function myRandom(const ARange: Integer): Integer;
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Okay Danke das ist echt "krass" das durch den Cache das sooo extremst langsam wird dann.
jeweils 100 Durchgänge auf 8 Kerne - dh mit 8 Threads dauert ein einzelner Durchgang ca 16 mal so lange - (er sollte ja 8 mal schneller sein und braucht doppelt so lang)
Threading (1 Threads) : 3199,55 ms
Threading (2 Threads) : 5985,58 ms
Threading (4 Threads) : 6630,61 ms
Threading (8 Threads) :...
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Hmmm blöd gefragt ich dachte wenn es eine 0815 globale Variable ist, dann greifen die Threads einfach direkt darauf zu, und es kann passieren das da dann Müll rauskommt wenn einer schreibt und einer liest und nicht das sich das ganze dann so verhält wie wenn es in einer criticalsection stehen würde?
dh meiner Meinung nach dürfte eine "normale" variable den Thread nicht verlangsamen sondern es...
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Danke das wars
Ohne Random verhält es sich nun wie ich es erwarte ...
Komisch im Source vom Randsom sieht man keine CriticalSections oder co
Aber nun kann ich weiter testen danke
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Hmm verstehe ich nicht ganz
Ich möchte 100 mal die funktion internalExecute aufrufen
bei einem thread wird der eine Thread das 100 mal aufrufen
bei 8 Threads verteilt es sich, und im idealfall muss jeder Thread die funktion nur 12.5 mal aufrufen
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
JA es soll im prinzip ienfahc 100 mal der code vom internalExecute ausgeführt werden - in dem Fall eine einfachste Version - die nichts anderes macht ausser primitive Berechnungen.
Daher sollte er mit 8 Threads ja meiner Meinung nach 8 mal so schnell sein wie mit einem Thread - okay ganzer Overhead und co aber zumindest 4 mal so schnell.
Und nicht wie in meinem Fall das es sogar langsamer...
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Entwicklungsrechner ist ein virtualisierter mit 4 Kerne
Aber auch auf meinem Rechner hier dann direkt die EXE getestet und der hat 8 "echte" Kerne.
Bei beiden das gleiche - mit einem Thread ist es am schnellsten
Forum: Win32/Win64 API (native code)
Delphi
by Gruber_Hans_12345,
24. Jul 2023
Hallo kann mal wer einen Blick auf meinen Code werfen - irgendwo habe ich da einen Denkfehler.
Das ist meine Threadklasse
type
TTestThread = class(TThread)
protected
fWaitFinish : THandle;
fResumeEvent : THandle;
procedure Execute; override;
public