2012-10-01 2 views
1

여기 있습니다. OpenCL은 GPU와 마찬가지로 CPU에서 커널을 실행할 수 있기 때문입니다. GPU에는 개인 메모리 (레지스터)와 공유 메모리가 물리적으로 있지만 OpenCL 장치로 CPU를 선택하면 개인 메모리와 공유 메모리가 어떻게 구현됩니까?OpenCL에서 개인 메모리와 공유 메모리는 CPU에서 어떻게 구현됩니까?

나는 DRAM이나 다른 것 (L1, L2 심지어 L3 캐시까지도 에뮬레이트됩니까? 확실하지 않습니다)을 말합니다. 게다가, 공유 메모리를 사용하는 CPU의 성능은 GPU에 비해 ​​제한 될 것입니다.

답변

4

아무런 언어도 CPU 캐시에 직접 액세스 할 수 없습니다 (인용되었지만 3 개의 URL을 가질 담당자가 충분하지 않습니다 ...). 이는 OpenCL이 개인용 메모리를 캐시에 보관할 방법이 없다는 것을 의미합니다.

In this presentation from AMD 그들은 단순히 메모리 모델을 컨텍스트 (16 페이지)로 추상화 된 일련의 메모리 개체로 나타냅니다. 컨텍스트에서 장치가 사용할 수있는 버퍼이면 읽을 수 있습니다. 다른 종류의 커널 메모리에 관해서라면, GPU 대신 CPU에서 실행될 때 성능 차이가 없다고 가정 할 수 있습니다 (다른 유형의 DRAM이 있기 때문에).

그러나 클러스터에서 컴퓨팅하는 경우 호스트 메모리와 로컬 메모리는 여전히 달라 지므로 전송 속도를 고려해야합니다. 질문의 두 번째 부분에서이 기사 on memory models in OpenCL을 참조하십시오. 주어진 작업 그룹 내에서만 의사 소통을해야하는 방식으로 프로그램을 구성하면 얻을 수있는 성능이 있습니다.

추가 읽기를 들어, -http 참조하십시오 //software.intel.com/sites/landingpage/opencl/optimization-guide/index.htm

-1

의 OpenCL 메모리 모델은 GPU 아키텍처를 기반으로 만들어졌습니다. CPU에서 전역 메모리, 공유 메모리 및 상수 메모리에 대한 액세스는 동일한 캐시 계층 구조를 거칩니다.

물론 로컬 메모리로 구현하면 캐시 히트가 증가하므로 성능이 향상 될 수 있습니다.

관련 문제