2013-07-12 2 views
1

배열이 CUDA 장치의 메모리 __constant__에서 초기화하고 싶습니다. 런타임까지 크기 나 값을 알지 못합니다.CUDA에서 __constant__ 메모리를 사용하는 올바른 방법은 무엇입니까?

나는 __constant__ float Points[**N**][2] 또는 그와 비슷한 것을 사용할 수 있지만이 동적을 어떻게 만들 수 있습니까? 아마도 __constant__ float* Points의 형태일까요?

이것이 가능합니까? 그리고 아마도 더 중요한 것은 이것이 좋은 생각입니까? 이런 식으로하는 것이 더 나은 대안이 있다면 나는 그걸 듣고 싶다.

+0

[CUDA에서 동적 메모리의 동적 할당] (http://stackoverflow.com/questions/271273/dynamic-allocation-of-constant-memory-in-cuda)의 가능한 복제본. 이 항목은 [상수 메모리 할당 및 초기화] (https://devtalk.nvidia.com/default/topic/367449/cuda-programming-and-performance/constant-memory-allocation-and-initialization/)에서도 논의되었습니다. . – JackOLantern

+0

그게 내가 필요한 것입니다. 이 대답을하면 받아 들일 것입니다. –

답변

2

Dynamic Allocation of Constant memory in CUDAConstant memory allocation and initialization에서 논의되었으므로, 사용자는 할 수 없습니다. , Constant memory allocation and initialization에서 발견으로

상수 (당신이 실행시에 상수 값을 설정하는 기호로 지정된 주소로 바이트를 복사해야 그 이유는) 컴파일시 실행 파일에 포함됩니다. 따라서 동일한 컴파일 된 커널의 다양한 호출에 대해 크기가 다른 상수 배열을 할당 할 수 없습니다.

텍스처 크기는 동적으로 설정 될 수 있으며 캐시되기 때문에

Constant memory allocation and initialization의 추천 텍스처 메모리를 사용하는 것이 었습니다.

케플러를 사용하는 경우 배열 포인터를 const __restrict으로 꾸미는 것이 좋습니다. 이 방법으로 배열을 동적으로 할당 할 수 있고 컴파일러는 런타임시 텍스처 캐시를 통해 데이터가 자동으로 읽혀 지도록 정렬합니다.

관련 문제