2012-01-14 3 views
7

각 GPU 장치 (AMD, NVidea 또는 기타)는 고정 된 수의 코어 (VertexShaders/StreamProcessors)가있는 여러 Compute Units (MultiProcessors)로 분할됩니다. 따라서 하나의 프로세서에는 (Compute Units) x (VertexShaders/compute unit) 개의 동시 프로세서가 있지만 다중 프로세서 당 사용할 수있는 고정 된 양의 작은 고정 된 양의 __local 메모리 (대개 16KB 또는 32KB)가 있습니다. 따라서 이러한 다중 프로세서의 정확한 수는 중요합니다. 이제OpenCL 로컬 메모리 크기 및 계산 단위 수

내 질문 :

  • (A) 나는 장치에서 멀티 프로세서의 수를 알 수 있습니까? 이것은 CL_DEVICE_MAX_COMPUTE_UNITS과 같습니까? http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units과 같은 사양 시트에서 추론 할 수 있습니까?
  • (b) GP를 구입하기 전에 GP 당 사용 가능한 메모리 양을 확인하려면 어떻게해야합니까? 물론 그것을 실행하는 컴퓨터에서 CL_DEVICE_LOCAL_MEM_SIZE을 요청할 수는 있지만, http://www.amd.com/us/products/desktop/graphics/7000/7970/Pages/radeon-7970.aspx#3과 같은 개별적인 세부 사양 시트에서도 어떻게 추론 할 수 있는지 알 수 없습니까?
  • (c) 현재 가장 큰 카드는 CL_DEVICE_LOCAL_MEM_SIZE입니까? 가격은 중요하지 않지만 64KB (또는 그 이상)는 내 알고리즘이 완전히 병렬화 될 수 있기 때문에 필자가 작성한 애플리케이션에 명확한 이점을 제공하지만 각 MP 내에서 임의의 액세스 패턴으로 높은 메모리 집약도 (에지를 반복 그래프의).
+0

SDK의 AMD/NVIDIA가 제공 한 샘플에서 장치 쿼리를 실행 해보십시오. 특정 장치의 장치 쿼리를 알고 싶다면 누가 온라인에 연결했는지 많은 사람들이 있습니다. – nouveau

답변

7
  1. CL_DEVICE_MAX_COMPUTE_UNITS 그렇지 않으면 당신이 할 수있는, 당신에게 적절한 매뉴얼합니다 (AMD opencl programming guideNvidia OpenCL programming guide)에서 눈을 ComputeUnits의 수를 제공해야
  2. AMD의 링크 가이드는 컴퓨팅 단위당 availible 로컬 메모리에 대한 정보가 포함되어 있습니다 (일반적으로 32kB/CU). NVIDIA의 경우 빠른 Google 검색을 통해 this document으로 밝혀졌으며 G80 및 G200 기반 GPU의 로컬 메모리 크기는 16kB/CU입니다. fermi 기반 카드 (GF100)에는 64kB 온칩 메모리가 있으며 48kB 로컬 메모리와 16kB L1 캐시 또는 16kB 로컬 메모리와 48kB L1 캐시로 구성 할 수 있습니다. 또한 fermi 기반 카드는 최대 768kB (GF100 및 GF110에서는 768kB, GF104 및 GF114에서는 512kB, GF106 및 GF116에서는 384kB, 위키 피 디아에서는 GF108 및 GF118에서는 없음)의 L2 캐시를 제공합니다.
  3. 위의 정보를 보면 현재의 nvidia 카드가 계산 단위당 가장 많은 로컬 메모리를 갖고있는 것으로 보입니다. 또한 그것은 내 이해에서 일반 L2 캐시가있는 유일한 캐시입니다.

그러나 로컬 메모리를 사용하려면 로컬 메모리가 작업 그룹당 (작업 그룹에만 액세스 가능) 할당되지만 계산 단위는 일반적으로 하나 이상의 작업 그룹을 유지할 수 있습니다. 따라서 알고리즘이 하나의 작업 그룹에 전체 로컬 메모리를 할당 한 경우 최대 병렬 처리량을 사용할 수 없습니다. 또한 로컬 메모리가 뱅킹되므로 랜덤 액세스는 많은 은행 갈등과 워프 직렬화로 이어질 것이라는 점에 유의하십시오. 그래서 당신의 알고리즘은 당신이 생각하는 것처럼 아주 잘 parallize하지 않을 수도 있습니다.

페르미 기반 카드를 사용하면 모든 작업 그룹이 동일한 데이터에서 작동하는 경우 명시 적 로컬 메모리 대신 캐시를 사용하는 것이 가장 좋습니다 (L1/로컬 메모리 구성을 전환하는 방법을 모르지만).

+0

그건 당신이 거기서 일어나는 매우 흥미로운 점입니다. 제 알고리즘은 계산 단위당 모든 로컬 메모리를 실제로 소비합니다.최대 속도로 실행되도록 동일한 계산 단위에서 몇 개의 작업 그룹을 실행해야합니까? – user1111929

+0

또한, 그 L2 캐시 흥미로운 소리,하지만 그것을 얻지 않습니다. 최신 장치에는 32 개의 연산 장치가 있고 Fermi는 768KB L2 캐시를 제공합니다. 이는 연산 단위당 24KB (64KB L1과 비교)에 불과합니다. 나는. L1 캐시보다 L2가 적습니까? 아니면이 캐시의 요점을 오해하고 있습니까? – user1111929

+0

위의 첫 번째 주석에 대한 부록 : 각 작업 그룹은 몇백 개의 작업 항목으로 구성됩니다. – user1111929

관련 문제