2012-04-14 3 views
3

는 OpenCL을 메모리 아키텍처 사이에 직접적인 관계가있다. 예를 들어 1GB 메모리/L1 캐시/L2 캐시가있는 GPU 카드. 이것들은 로컬/글로벌 메모리와 관련이 있습니까?OpenCL 메모리 아키텍처와 GPU의 물리적 메모리/캐시 (L1/L2 ...) 사이의 관계?</p> <p>지역/<a href="http://www.codeproject.com/KB/showcase/Memory-Spaces/image001.jpg" rel="nofollow">memory</a></p> <p>개인 상수 글로벌// 그리고 물리적 인 GPU의 메모리와 캐시 :

또는 전역 메모리에서 로컬/상수/개인 메모리가 할당 되었습니까? - 고마워요

답변

5

OpenCL은 실제로 메모리 캐싱에 대해 설명하지 않습니다. 대부분의 최신 그래픽 카드에는 전역 메모리를위한 일종의 캐싱 프로토콜이 있지만 오래된 카드에서는 보장되지 않습니다. 그러나 여기에 서로 다른 추억의 개요가 있습니다.

개인 메모리 -이 메모리는 작업 항목 당 레지스터로 유지됩니다. GPU에는 계산 단위당 매우 큰 레지스터 파일이 있습니다. 그러나이 메모리는 필요한 경우 로컬 메모리로 유출 될 수 있습니다. 개인 메모리는 변수를 만들 때 기본적으로 할당됩니다.

로컬 메모리 - 작업 그룹이 로컬이고 공유하는 메모리입니다. 이 메모리 시스템은 일반적으로 계산 단위 자체에 있으며 다른 작업 그룹에서는 읽거나 쓸 수 없습니다. 이 메모리는 일반적으로 GPU 아키텍처에서 지연 시간이 매우 짧습니다 (CPU 아키텍처에서이 메모리는 시스템 메모리의 일부입니다). 이 메모리는 일반적으로 전역 메모리의 수동 캐시로 사용됩니다. 로컬 메모리는 __local 속성으로 지정됩니다.

상수 메모리 - 전역 메모리의 일부이지만 읽기 전용이므로 적극적으로 캐시 할 수 있습니다. __constant은이 유형의 메모리를 정의하는 데 사용됩니다.

글로벌 메모리 - 이것은 GPU의 메인 메모리입니다. __global은 메모리를 전역 메모리 공간에 배치하는 데 사용됩니다.

+0

감사합니다. 또한 전역 메모리의 50 % 크기의 개인/로컬 메모리를 할당 할 수 있는지도 알 수 있습니까? ... 현대 GPU에서 – Maiss

+1

@Maiss : 계산 단위 당 현대 gpus 로컬 메모리는 16kB에서 64kB 사이의 어딘가에 있으며 전역 메모리 afaik로 유출되지 않습니다. 그래서 당신은 할 수 없다. – Grizzly

+0

개인용 메모리가 오프 칩 DRAM 일 수 있다고 말하는 여러 가지 자료를 읽었으므로 가장 느린 것이지만 최근 GPU는이 메모리를 mem 계층 구조에서 가장 높은 레지스터/L1에 캐시합니다 . 누군가 이걸 확인할 수 있을까요? 개인 mem의 성격을 결정하는 방법이 있는지 여부 그것은 가장 느린 (오프 칩) 또는 가장 빠른 가능한 것 (레지스터)처럼 보입니다. – JDS