Ich verstehs nicht wieso ich keine Motivation mehr habe.
Minimale GPUCalc Library (OpenGL)
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Dann sind das schon zuviele Uniform Daten. Egal, Projekt ist vorbei, ich mach nichtsmehr so schnell.
Ich verstehs nicht wieso ich keine Motivation mehr habe.
Ich verstehs nicht wieso ich keine Motivation mehr habe.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Das Konzept ist doch übelst geil, und so einfach! Mach weiter, such Motivation! Das wäre super für Neuronale Netze!
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Ich versuchs schon seit ein paar Jahren, vielleicht hauts ja jetzt irgendwann hin mit der Motivation, aber ich glaube eher nicht.Norbie hat geschrieben:such Motivation!
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
?!? Bist du Depri? Hast du vor deine Lehrer zu töten? Lass dir helfen! Seelsorge Prister Freunde!
MfG!
MfG!
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Selber Link, neues Glück!
http://www.bradan.eu/files/gpuCalc.zip (Eventuell den Cache von eurem Browser vorher leeren)
Ist hier nun 10 mal schneller als meine CPU. Jetzt können maximal 64x64x3 = 12288 Floats als ein Datensatz übergeben werden und es können bis zu 4 Datensätze verwendet werden. Und pro Fragmentshaderdurchlauf werden nun 3 Datensatz-Floats berechnet.
Desweiteren kann man nun statt nur einer Formel einen ganzen Code einbinden. In diesem Code muss die Funktion vec3 calc(int startOffset) definiert sein. Der Parameter dieser Funktion sagt aus, welcher Indexwert des resultierenden Puffers der aktuell zu Berechnende ist.
Es gibt eine weitere Funktion: vec3 getData(int datasetIndex, int offset). Mithilfe dieser Funktion kann man 3 Werte aus einem Datensatz holen, wobei der Index des ersten Wertes offset ist. Der erste Parameter (datasetIndex) bestimmt den Datensatz durch einen Index zwischen 0 und 3.
Wenn ihr euren Code prüfen wollt, könnt ihr euch sowas wie GLSLValidate von 3DLabs runterladen. Jedoch musste ich vor geraumer Zeit feststellen, dass 3DLabs (Oder jetzt ziilabs?) das Programm nichtmehr anbietet. Aber wie ich sehe ist es noch im Internet (Sucht einfach nach GLSLValidate bei Google).
Ansonsten kann ich noch sagen, dass man das mit der einfachen Formel ganz leicht nachbilden kann wenn man das Type-Casting von GLSL nicht ganz versteht:
wird zu
Hier hätte man nun schreiben können das wäre dann effektiver gewesen. Aber wie gesagt, wenn ihr euch nicht mit GLSL auskennt ist das manchmal besser.
Das mit dem eigenen Code bringt halt den Vorteil, dass man mehr Möglichkeiten (Nicht nur in Sachen Optimierung) hat als mit einer so simplen Formel.
Ansonsten kann ich nur die Befehlsliste erneuern. Das mach ich im ersten Beitrag
. Dauert allerdings eine Weile.
Ich hoffe euch gefällts so besser.
------------------------------------------------------------------------
@Norbie: Nein, aber ich brauch dringend Motivation.
http://www.bradan.eu/files/gpuCalc.zip (Eventuell den Cache von eurem Browser vorher leeren)
Ist hier nun 10 mal schneller als meine CPU. Jetzt können maximal 64x64x3 = 12288 Floats als ein Datensatz übergeben werden und es können bis zu 4 Datensätze verwendet werden. Und pro Fragmentshaderdurchlauf werden nun 3 Datensatz-Floats berechnet.
Desweiteren kann man nun statt nur einer Formel einen ganzen Code einbinden. In diesem Code muss die Funktion vec3 calc(int startOffset) definiert sein. Der Parameter dieser Funktion sagt aus, welcher Indexwert des resultierenden Puffers der aktuell zu Berechnende ist.
Es gibt eine weitere Funktion: vec3 getData(int datasetIndex, int offset). Mithilfe dieser Funktion kann man 3 Werte aus einem Datensatz holen, wobei der Index des ersten Wertes offset ist. Der erste Parameter (datasetIndex) bestimmt den Datensatz durch einen Index zwischen 0 und 3.
Wenn ihr euren Code prüfen wollt, könnt ihr euch sowas wie GLSLValidate von 3DLabs runterladen. Jedoch musste ich vor geraumer Zeit feststellen, dass 3DLabs (Oder jetzt ziilabs?) das Programm nichtmehr anbietet. Aber wie ich sehe ist es noch im Internet (Sucht einfach nach GLSLValidate bei Google).
Ansonsten kann ich noch sagen, dass man das mit der einfachen Formel ganz leicht nachbilden kann wenn man das Type-Casting von GLSL nicht ganz versteht:
Code: Alles auswählen
dataA + dataBCode: Alles auswählen
vec3 calc(int startOffset) {
vec3 result;
vec3 dataA;
vec3 dataB;
dataA = getData(0, startOffset);
dataB = getData(1, startOffset);
// Und nun die Formel 3 mal einfügen (Weil ja 3 Floats gleichzeitig verarbeitet werden sollen):
result.x = dataA.x + dataB.x;
result.y = dataA.y + dataB.y;
result.z = dataA.z + dataB.z;
return result;
}Code: Alles auswählen
result = dataA + dataB;Das mit dem eigenen Code bringt halt den Vorteil, dass man mehr Möglichkeiten (Nicht nur in Sachen Optimierung) hat als mit einer so simplen Formel.
Ansonsten kann ich nur die Befehlsliste erneuern. Das mach ich im ersten Beitrag
Ich hoffe euch gefällts so besser.
------------------------------------------------------------------------
@Norbie: Nein, aber ich brauch dringend Motivation.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Schaut doch schon viel besser ausInitializing
Allocating some memory
Loading the dataset into the GPU
Binding the code
Calculating
Time needed for GPU Calculation (5000 times): 281ms
Dataset A: 0.000 0.100 0.200 0.300 0.400 0.500 [...]
Dataset B: 0.100 0.100 0.100 0.100 0.100 0.100 [...]
--------------------------------------------------------------------------------
Dataset R: 0.000 0.004 0.017 0.045 0.096 0.178 [...]
Time needed for CPU Calculation (5000 times): 3188ms
Dataset A: 0.000 0.100 0.200 0.300 0.400 0.500 [...]
Dataset B: 0.100 0.100 0.100 0.100 0.100 0.100 [...]
--------------------------------------------------------------------------------
Dataset R: 0.000 0.004 0.017 0.045 0.096 0.178 [...]
Both result-buffers are equal (Maximum tolerance between floats: 0.0000010000.
We must use this, because of different algorithms for square roots and power
of functions).
Press any key to release all data and to exit.
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Sieht gut aus.
Allocating some memory
Loading the dataset into the GPU
Binding the code
Calculating
Time needed for GPU Calculation (5000 times): 1341ms
Dataset A: 0.000 0.100 0.200 0.300 0.400 0.500 [...]
Dataset B: 0.100 0.100 0.100 0.100 0.100 0.100 [...]
--------------------------------------------------------------------------------
Dataset R: 0.000 0.004 0.017 0.045 0.096 0.178 [...]
Time needed for CPU Calculation (5000 times): 6381ms
Dataset A: 0.000 0.100 0.200 0.300 0.400 0.500 [...]
Dataset B: 0.100 0.100 0.100 0.100 0.100 0.100 [...]
--------------------------------------------------------------------------------
Dataset R: 0.000 0.004 0.017 0.045 0.096 0.178 [...]
Both result-buffers are equal (Maximum tolerance between floats: 0.0000010000. W
e must use this, because of different algorithms for square roots and power of f
unctions).
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Euh Hardwareinkompatibilität. Von der Spezifikation her dürfte es keinerlei Probleme geben, aber es gibt Hardware, die weicht vom Standard ab (Speziell etwas ältere ATI hat bei GLSL Mängel). Ich werd mal schauen ob ich das mit Branching nicht umgehen kann.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.

