__device__ 함수에서 메모리를 할당하는 방법이 CUDA에 있습니까? 이 작업을 수행하는 예제를 찾을 수 없습니다.CUDA는 __device__ 함수에서 메모리를 할당합니다.
매뉴얼에서 : B.15 동적 전역 메모리 할당 void * malloc (size_t size); void free (void * ptr); 전역 메모리의 고정 크기 힙에서 메모리를 동적으로 할당하고 해제합니다. CUDA 커널 내 malloc() 함수는 최소한 디바이스 힙에서 size 바이트를 할당하고 할당 된 메모리에 대한 포인터를 반환하거나 요청을 수행하기에 불충분 한 메모리가있는 경우 NULL을 반환합니다. 반환 된 포인터는 16 바이트 경계로 정렬됩니다. CUDA in-kernel free() 함수는 ptr이 가리키는 메모리를 할당 해제합니다. ptr은 malloc()에 대한 이전 호출에서 반환해야합니다. ptr이 NULL이면 free()에 대한 호출이 무시됩니다. 같은 ptr로 free()를 반복적으로 호출하면 정의되지 않은 동작이 발생합니다. malloc()을 통해 주어진 CUDA 스레드에 의해 할당 된 메모리는 CUDA 컨텍스트의 수명 동안 할당 된 채로 남아 있거나 free() 호출로 명시 적으로 해제 될 때까지 할당됩니다. 후속 커널 시작에서도 다른 CUDA 스레드에서 사용할 수 있습니다. 모든 CUDA 스레드는 다른 스레드가 할당 한 메모리를 해제 할 수 있지만 같은 포인터가 두 번 이상 해제되지 않도록주의해야합니다.
동적으로 메모리를 할당하려고합니까? – jmilloy
예. 나는 그것이 약간의 이국적인 요구 사항이지만 기존 코드베이스를 이식하고 있음을 알고있다. – SparcU