내 질문은 다음과 같습니다 :CUDA 변수가 글로벌 커널
1) 글로벌 커널에서 변수를 선언 할 때 각 스레드에 대해이 변수의 복사본이 달라질 것이라는 점을 이해 했습니까? 이렇게하면 모든 스레드에 대해이 변수에 중간 결과를 저장할 수 있습니다. 예 : 벡터 c = a + b :
__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
int p;
p = a[i] + b[i];
c[i] = p;
}
여기서 중간 변수 p를 선언합니다. 그러나 실제로이 변수의 N 사본이 각 스레드마다 하나씩 있습니다.
2) 배열을 선언하면이 배열의 N 개의 복사본이 각 스레드마다 만들어집니다. 그리고 글로벌 커널 내부의 모든 것이 gpu 메모리에서 발생하는 한, 선언 된 모든 변수에 대해 gpu에서 N 배의 메모리가 필요합니다. 여기서 N은 스레드의 수입니다.
3) 현재 프로그램에는 35 * 48 = 1680 블록이 있고 각 블록에는 32 * 32 = 1024 스레드가 있습니다. 글로벌 커널 내에서 선언 된 변수는 커널 외부에서 N = 1024 * 1680 = 1 720 320의 비용이들 것입니까?
4) 공유 메모리를 사용하려면 일반적으로 각 변수에 대해 M 배의 메모리가 필요합니다. 여기서 M은 블록의 수이고입니다. 그게 사실이야?
5) 왜 사람들이 항상 내 질문에 투표합니까? – Mihon
나는 당신에게 다운 다운을하지 않았지만, 한 번에 몇 가지 질문을했다. Stack Overflow는 일반적으로 질문이 명확하고 집중 될 것으로 기대합니다. –
네,하지만 질문은 서로 관련이 있습니다 .. – Mihon