2011-12-24 1 views
5
나는 다음과 같은 일을 오전

에 대한 __shared__ 변수에 사용할 수 없습니다. 컴파일러는 질문의 제목에 명시된 것처럼 오류를 던지고 있습니다. 나는 이것이 왜 문제인지 이해하지 못한다.초기화는 CUDA

답변

7

공유 변수의 정적 초기화는 CUDA에서 불법입니다. 문제는 모든 스레드가 공유 메모리의 정적 초기화를 처리하는 방법에 대한 의미가 프로그래밍 모델에서 정의되지 않는다는 것입니다. 어떤 스레드가 쓰기를해야합니까? 스레드간에 값이 일정하지 않으면 어떻게됩니까? 컴파일러는 그러한 경우에 어떻게 코드를 내 보내야하며 하드웨어가 어떻게 실행해야합니까?

무의미한 예제에서 블록의 모든 스레드에게 동일한 공유 변수를 값 (기본적으로 정적으로 컴파일 된 메모리 경합)으로 초기화하도록 요청합니다.

+1

그럼, 올바른 방법은 무엇입니까 ??? – Programmer

+0

참고 사항. 위의 경우, 블록의 각 스레드에게 exForBlockLessThanp에 동일한 값을 할당하도록 요청합니다. – Programmer

+0

조건부 명령문을 사용하여 커널의 시작 부분에서 초기화를 수행합니다. – talonmies