Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 21:38

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: und nochmal Multithreading
BeitragVerfasst: Di Okt 09, 2012 19:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
hallöchen allerseits,

wie steht es eigentlich mit multithreading und compilierten Listen? Nehmen wir mal folgendes Beispiel (ist nicht sehr sinnvoll aber es zeigt das Prinzip):
Eine Shell der Größe (byte,byte) generiert eine Liste (byte*byte*byte) und fügt für jede Position alle Characters hinzu. Diese ruft
man dann wie folgt auf:
Code:
  1.  
  2.         public static void DrawText(this string self, byte posx, byte posy)
  3.         {
  4.             Parallel.For(0, self.Length, delegate(int i)
  5.             {
  6.  
  7.                 glCallList((posy << 16) | ( posx << 8) | self[i]);
  8.                 asyncSwap()
  9.             });
  10.         }
  11.  


würde das eventuell zu Problemen führen?

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: und nochmal Multithreading
BeitragVerfasst: Mi Okt 10, 2012 08:43 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Äh... Jain, wahrscheinlich macht es Probleme. Das Parallel.For hat folgende Wahl:
* Im Aufrufenden Thread wird die Schleife komplett abgearbeitet, z.B. Schleife hat wenige Elemente und ist schnell abgearbeitet. Das ist prima, denn an deinen Thread hast Du wahrscheinlich auch den gl-Context gebunden. (vermutlich hast Du das in deinen Tests beobachtet.)
* Die Schleife wird auf verschiedene Threads verteilt; das ist schlecht: Du kennst die Threads nicht und es gibt keine Abmachung welche Threads Teile der Schleife abarbeiten - der gl-Context wird nicht gebunden sein, der gl-Aufruf geht im besten Fall ins Leere. (mach mal ein sleep in den delegate )

Ich würde OpenGl Aufrufe nicht parallel abarbeiten. Die Grafikschnittstelle gibt es ja nur einmal und das Rastern als solches ist für den Treiber gut parallelisierbar und passiert transparent, du brauchst dich also normalerweise gar nicht darum zu kümmern. Ein Thread für alles was OpenGl betrifft sollte genügen.

Wo sich Parallelität dagegen lohnt ist wenn du diesem Opengl-Thread zuarbeiten kannst - irgendwelche preprocessing Tasks an den Modellen (gebastel an Modellen für Animationen, Erzeugung von Modelldaten, etc.), dynamiche Texturerstellung, Physik, Soundeffekte, usw. Eigentlich alles was Du auf deinen Daten tun musst und kannst, bevor etwas gerendert wird und gleichzeitig passieren kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: und nochmal Multithreading
BeitragVerfasst: Mi Okt 10, 2012 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Also bleibt doch nur das offizielle Beispiel

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.006s | 14 Queries | GZIP : On ]