1
GPU에 전역 메모리를 할당하는 다음 코드가 있습니다.전역 메모리 할당
__global__ void mallocTest()
{
char* ptr = (char*)malloc(123);
//....
free(ptr);
}
모든 스레드가 별도의 ptr에 메모리를 할당합니까?
그래서 만약 내가 10 스레드의 2 블록을 누른 다음 20 배열이 할당됩니다 (즉, 모든 스레드가 자신의 사용을 위해 메모리를 할당)? 어떻게 스레드 당 대신에 블록 당 메모리 만 할당 할 수 있습니까? 즉, 2 개의 블록과 10 개의 스레드가있는 경우 2 개의 배열 만 할당됩니다. 이 가능합니까?
내가 언급 했어야하지만 배열의 크기가 공유 메모리에 맞지 않습니다 ... – scatman
그러면 블록 당 하나의 스레드가 malloc/new로 힙에 메모리를 할당하고 ** 주소 **를 저장합니다 각 스레드가 읽을 수있는 공유 메모리의 할당 그런 다음 블록의 각 스레드가 메모리를 사용할 수 있습니다. – talonmies
Scatman : 모든 스레드가 동일한 크기의 메모리를 할당해야한다면 호스트 코드 (cudaMalloc)의 모든 스레드를 할당하고 커널에 전달하여 각 스레드가 메모리에서 해당 스레드에 액세스하도록하십시오. –