2011-09-06 5 views
0

각 스레드에 대해 CUDA 커널 함수에서 로컬 변수를 선언한다고 가정 해 보겠습니다.로컬 메모리 액세스가 병합됩니까?

float f = ...; // some calculations here 

선언 된 변수가 컴파일러에 의해 로컬 메모리 (전역 메모리와 동일합니다 내가 아는 한 한 스레드에서만 볼 수 있습니다). 내 질문은 그것을 읽을 때 f에 대한 액세스가 병합됩니까?

답변

2

로컬 메모리 (또는 Fermi의 스택)가 메모리에 배치되는 방법에 대한 공식적인 문서가 없다고 생각하지만, mulitprocessor 할당이 "줄무늬"방식으로 액세스되어 비 발산 동일한 워프의 쓰레드는 로컬 메모리에 대한 통합 된 액세스를 얻습니다. Fermi에서 로컬 메모리는 전역 메모리와 동일한 L1/L2 액세스 메커니즘을 사용하여 캐시됩니다.

-1

CUDA 카드에는 로컬 변수에 할당 된 메모리가 없습니다. 모든 지역 변수는 레지스터에 저장됩니다. 변수가 많은 복잡한 커널은 병행 적으로 실행할 수있는 스레드 수를 줄여 주며, 낮은 점유율이라고합니다.

+0

간단히 말해서 사실이 아닙니다. 모든 스레드는 최대 16kb의 정적으로 할당 된 로컬 메모리 할당을 가질 수 있습니다. 이 메모리는 칩 밖에서 SDRAM에 저장되며 캐시되지 않습니다. 자세한 내용은 [this] (http://drdobbs.com/high-performance-computing/215900921) 또는 CUDA 프로그래밍 가이드를 참조하십시오. – talonmies

+0

당신은 아주 옳습니다. 나는 여러 번 프로그래밍 가이드를 살펴본 적이 있고 어떻게 든 이전에는 알아 채지 못했습니다. –

관련 문제