Seite 2 von 2

Re: Effiziente Synchronisation von Threads

Verfasst: 19.05.2014, 11:09
von Horus
Hey,

schön, dass euch die Videos gefallen.
Dabei ist alles noch in einem sehr frühen Stadium.
Die grundlegenden Funktionen der Engine wollen solide implementiert sein!
Designentscheidungen treffe ich oft aufgrund von Benchmarking. Datenorientierung hat Objektorientierung abgelöst. Das alles braucht seine Zeit.
Die Grafik ist noch im Rohzustand.

Bzgl. volatile und Umordnung durch den Compiler könnte es bei mir womöglich hässliche Fehler geben, wenn ich nicht den Visual C++ Compiler nehme. Da gucke ich mal mit mehr atomics. Das war mir neu. :idea:




Es geht ja um die "Effiziente Synchronisation von Threads"
Eine weitere Erfahrung, bzw eine weitere Methode, welche soeben die Effizienz der Synchonisation steigert.
Verglichen habe ich die auf eine Sekunde gemittelte Maximale Update-Frequenz in der Zielanwendung.

Die Threads (Ich lasse es mit 2 Threads pro Core laufen) holen sich jeweils ein Paket von Items ab, welches sie dann abarbeiten.
Die Größe der Pakete ist nun Flexibel. Erst große Pakete, zum Ende kleinere. Vorher war die Größe statisch.
Ich will so erreichen, dass alle Threads möglichst gleichzeitig fertig sind und wenig Brüche in der Cache-Line auftreten.
Und es funktioniert. Eine kleine Funktion mehr, welche die Leistung um ~3% anschiebt. Für den geringen Aufwand ganz nett.

Re: Effiziente Synchronisation von Threads

Verfasst: 19.05.2014, 12:27
von Aramis
Ich sehe gerade nicht, dass das allen Compilern vorgeschrieben wäre.
Du hast natuerlich recht, ich hab es verwechselt. Demzufolge funktioniert es mit VC standardmaessig auf allen Plattformen ausser ARM.

Re: Effiziente Synchronisation von Threads

Verfasst: 19.05.2014, 14:40
von dot
Es funktioniert mit VC auf x86, es ist aber dennoch falsches C++.

Re: Effiziente Synchronisation von Threads

Verfasst: 19.05.2014, 14:51
von Krishty
Ist es nicht eher undefiniertes und nicht portables C++?

90 % der WinAPI ist in C++ undefiniert (flacher Adressraum, Zweierkomplement, blabla), aber deswegen ist das C++ nicht „falsch“.

Nirgendwo steht, dass das Programm ill-formed wäre, weil es aus der Variable liest.

Re: Effiziente Synchronisation von Threads

Verfasst: 19.05.2014, 15:22
von dot
Ja gut, es ist undefiniert. Ich würde jedenfalls Abstand von Code nehmen, der nur mit einem ganz konkreten Compiler eines gewissen Herstellers und selbst dann nur auf einer ganz bestimmten Architektur funktioniert, wenn ich das selbe auch mit Standard C++ erreichen könnte...