Seite 1 von 1

Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 16:14
von Raphael
Hallo,

weiß jemand, wie oder wo ich herausfinden kann, wie viel lokaler Speicher pro OpenGL Compute Shader Thread zur Verfügung steht? Also der, in welchen z.B. globale Arrays des Shaders gespeichert werden? Ich habe schon ziemlich viel gesucht, habe aber wenn nur Informationen zum Shared Speicher für die gesamte Workgroup gefunden. Also testweise funktionieren 200 vec4 auf meiner Geforce 860m unter Linux, jedoch wäre ein Wert aus der Spezifikation oder einer OpenGL Abfrage besser.

Hier steht unten, dass der Shared Speicher 32KB als Minimum in OpenGL haben muss: https://www.opengl.org/wiki/Compute_Shader ("The OpenGL-required minimum is 32KB.")
Bei DirectCompute scheint es, dass der lokale Speicher vom Shared abgezwackt wird: https://msdn.microsoft.com/en-us/librar ... 85%29.aspx ("A single thread is limited to a 256 byte region of groupshared memory for writing.")

Re: Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 16:35
von Krishty
Raphael hat geschrieben:Bei DirectCompute scheint es, dass der lokale Speicher vom Shared abgezwackt wird: https://msdn.microsoft.com/en-us/librar ... 85%29.aspx ("A single thread is limited to a 256 byte region of groupshared memory for writing.")
Nur auf D3D 10.1-Hardware, also steinalt. Für D3D 11 gilt das Limit nicht.

Re: Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 16:38
von Raphael
Aber es muss doch eines geben? :D Ich möchte in meiner Masterarbeit halt ungerne schreiben: Hab es mal probiert, ging halt...

Re: Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 16:40
von dot
Nun, wenn du dir mal z.B. CUDA anschaust, wirst du feststellen, dass praktisch alle NVIDIA GPUs (bis auf ein paar vorsteinzeitliche) mindestens 64k Shared Memory haben. Ich hab grad keine Zeit nachzuschaun, bin mir aber sicher, dass es in OpenGL und insbesondere OpenCL eine Möglichkeit gibt, das abzufragen... ;)

Re: Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 17:09
von Raphael
Shared wird bei OpenGL auch mit mindestens 32KB angegeben. Mich interessiert aber der lokale, pro Thread. Wird der einfach von der gesamten Workgroup in den gemeinsamen Shared gelagert? Sprich Shared Speicher / Anzahl der Threads = Lokaler Speicher?

Re: Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 17:36
von dot
Local Memory liegt zumindest auf NVIDIA effektiv im global Memory; jeder Thread hat auf allen Architekturen da bis zu 512 KB [1]. Die Frage ist, wieso das für dich wichtig ist, deinen local Memory Verbrauch willst du normalerweise so winzig wie nur irgendwie möglich halten...

[1] http://docs.nvidia.com/cuda/cuda-c-prog ... ifications, Table 13

Re: Speicher pro Compute Shader Thread

Verfasst: 23.05.2016, 22:44
von Raphael
Für meine Arbeit "Visualisierung der Oberflächendynamik von Molekühlen" muss ich zuerst die Oberflächenatome extrahieren. Dazu setze ich einen Schnitt-Test-Algorithmus [1] auf der GPU um, wobei jedes Atom mit seinen Nachbarn geschnitten wird. Nun kann ein Atom teilweise über 100 Nachbarn besitzen und ich möchte bei einem Schnitt die Ebene als auch den Mittelpunkt des Schnittkreises speichern. Das funktioniert auch, nur würde ich gerne die maximale Anzahl der Nachbarn angeben, welche mit der Berechnung möglich sind.

[1] http://www.sciencedirect.com/science/ar ... 9313001866