장치에서 실행될 CUDA 코드를 작성 중입니다. 이 코드는 상수 값의 2 개의 조회 테이블을 사용합니다. 이 중 첫 번째는 256 부호없는 int 배열 내가로 선언CUDA에서 dim3 구조체의 상수 배열을 정의하는 방법
__constant__
uint16_t edgeTable[256]={
0x000,
0x019,
... etc.
};
그리고이 잘 컴파일 것으로 보인다.
두번째 dim3의 고정 된 크기 어레이이고, I는이 시도 :
__constant__
dim3 offsets[8] = {
{0, 0, 0}, {0, 0, 1}, {0, 1, 0},
... etc
};
있는 컴파일러 개체. 오류 메시지와 함께 :
error: dynamic initialization is not supported for __device__, __constant__ and __shared__ variables.
는 아마도 내가 동적 초기화 오해하지만,이 정적 초기화이라고는 컴파일러가 모든 것의 크기를 해결할 수, 나에게 보인다 모든 값이 제공됩니다.
무엇이 여기에 있습니까?
어떻게하면 되겠습니까?
감사
내가 GCC와 우분투 14.04에 CUDA7.5 툴킷을 사용하고 4.8.4
아마도 바보 같은 질문입니다. C++ 11을 사용하도록 플래그를 전달 했습니까? – Hurkyl
매개 변수화 된 생성자 초기화 (dim3은 클래스 임)는 C++에서 C++ 11 이전에 지원되지 않습니다. – talonmies
아마도이 질문은 실제로 동적 초기화 (위의 주석 참조)이며 동적 초기화는 지원되지 않습니다. 이러한 변수 유형은 컴파일러가 지시 한 것과 마찬가지로 C++ 11 컴파일러 스위치와 관계없이 나타냅니다. 가능한 해결 방법으로,'int'의 배열 ('__constant__ int'의 정적 초기화)을 생성 한 다음 커널 코드에서'dim3'의 배열로 캐스팅 할 수 있습니다 (예 : http : // pastebin .com/FrMZxL8T). 아마 당신이 이미 해결 방법을 찾아 낼 수있을 것 같아서, 이것이 대답이라고 제안하는 것은 아닙니다. –