Ich schreibe einen Algorithmus in OpenCL, in dem ich jede Arbeitseinheit eine große Menge an Daten speichern müsste, sagen wir etwas zwischen einem long[70]
und einem long[200]
oder so pro Kernel.
Aktuelle AMD-Geräte haben 32 KiB __local
Speicher, der (für die angegebene Datenmenge pro Kernel) ausreicht, um die Informationen für 20-58 Arbeitseinheiten zu speichern. Wie auch immer ich verstehe, von der Architektur (und besonders von dieser Zeichnung ) Shader-Core verfügt auch über eine dedizierte Menge an privatem Speicher. Ich finde jedoch seine Größe nicht.
Kann mir jemand sagen, wie man herausfinden kann, wie viel privater Speicher jeder Kernel hat?
Ich bin besonders neugierig auf die HD7970, da ich bald einige davon kaufen werde.
Bearbeiten: Problem gelöst, die Antwort ist hier in Anhang D.
Die Antwort wurde von Benutzer talonmies in den Kommentaren gegeben, also werde ich es hier in einer neuen Antwort schreiben, um die Frage zu schließen.
Diese Werte können in Anhang D des AMD APP OpenCL Programming Guide Ссылка zu finden ( Ein ähnliches Dokument existiert für nVidia). Anscheinend ist ein Register 128 Bits (4x32) für AMD-Geräte und es gibt 16384 Register für alle modernen High-End-Geräte, so dass eine bemerkenswerte 256 KB pro Recheneinheit ist.
Ich denke, Sie suchen nach einem lokalen Speicher. Darauf beziehen sich 32 KB lokaler Datenspeicher. Ich denke nicht, dass Sie das Gerät abfragen können, um die private Speichermenge zu erhalten.
Sie können eine NULL long * cl_mem-Referenz übergeben, um den Speicher zuzuweisen. Ich denke, es ist am besten, eine statische Menge an Speicher pro WI zu verwenden. Angenommen, dass für jedes Arbeitselement eine lange [200] benötigt wird, verwenden Sie den folgenden Code. Es wäre auch eine gute Idee, die Arbeit in Gruppen zu teilen, die die gleichen (oder ähnliche) Speicheranforderungen haben, um den LDS-Speicher optimal zu nutzen.
%Vor%Um zu beantworten, wie groß die Registerdatei in einer 79xx-Serienkarte ist, ist sie, da sie auf der GCN-Architektur basiert, 64 KB gemäß dem Bild in anandtech: Ссылка
Um Ihre Frage zu beantworten, wie Sie herausfinden, wie viel Speicher jeder Kernel verwendet, können Sie den AMD APP Profiler auf Ihrem Kernel ausführen. Er teilt Ihnen im Kernelbelegungsabschnitt mit, wie viel Speicherplatz vom Kernel genutzt wird.
>Tags und Links architecture opencl gpu gpgpu amd-processor