2012-04-14 4 views

Antwort

5

OpenCL nicht wirklich Caching von Speicher diskutieren. Die meisten modernen Grafikkarten haben eine Art Caching-Protokolle für den globalen Speicher, aber diese sind bei älteren Karten nicht garantiert. Hier ist jedoch eine Übersicht über die verschiedenen Erinnerungen.

Privater Speicher - Dieser Speicher wird als Register pro Arbeitselement gespeichert. GPUs haben sehr große Registerdateien pro Recheneinheit. Dieser Speicher kann jedoch bei Bedarf in den lokalen Speicher ausgelagert werden. Privater Speicher wird standardmäßig zugewiesen, wenn Sie Variablen erstellen.

Lokaler Speicher - Arbeitsspeicher lokal und von der Arbeitsgruppe freigegeben. Dieses Speichersystem befindet sich typischerweise in der Recheneinheit selbst und kann nicht von anderen Arbeitsgruppen gelesen oder beschrieben werden. Dieser Speicher hat typischerweise eine sehr geringe Latenz auf GPU-Architekturen (bei CPU-Architekturen ist dieser Speicher einfach ein Teil Ihres Systemspeichers). Dieser Speicher wird normalerweise als manueller Cache für globalen Speicher verwendet. Der lokale Speicher wird durch das Attribut __local angegeben.

Konstanter Speicher - Teil des globalen Speichers, aber nur lesbar und kann daher aggressiv zwischengespeichert werden. __constant wird verwendet, um diesen Speichertyp zu definieren.

Globaler Speicher - Dies ist der Hauptspeicher der GPU. __global wird verwendet, um Speicher in den globalen Speicherbereich zu platzieren.

+0

Ich schätze es. Könnten Sie auch sagen, ob ich einen privaten/lokalen Speicher von 50% der Größe von Global Memory zuweisen kann? ... in modernen GPUs – Maiss

+1

@Maiss: für moderne GPUs liegt der lokale Speicher pro Recheneinheit irgendwo zwischen 16kB und 64kB (und verschüttet nicht den globalen Speicher afaik). Also nein, du kannst nicht – Grizzly

+0

Ich habe verschiedene Quellen gelesen, die sagen, dass privater Speicher außerhalb des Chips DRAM sein kann, die es am langsamsten machen würde, aber dass aktuelle GPUs diesen Speicher in Register/L1 zwischenspeichern, die höchste in der mem-Hierarchie . Kann das jemand bestätigen? Und ob es einen Weg gibt, die Art Ihres privaten Mem zu bestimmen? Scheint so, als ob es das langsamste (außerhalb des Chips) oder das schnellstmögliche (Register) sein könnte. – JDS

Verwandte Themen