0
I가 CUDA에서 다음 템플릿 __device__
기능 : 컴파일 float로서 T 인스턴스화하면 잘 실행액세스
template<typename T>
__device__ void MyatomicAdd(T *address, T val){
atomicAdd(address , val);
}
, 즉
__global__ void myKernel(float *a, float b){
MyatomicAdd<float>(a,b);
}
문제없이 실행됩니다.
이중 함수에 대해 atomicAdd()
이 없으므로이 함수를 전문으로하고 싶었으므로 구현 코드에 배정도로 사용할 수 있습니다. 지금은 배정 밀도의 전문성을 무시하고, 단일 정밀도 전문화 및 템플릿는 다음과 같습니다 :
template<typename T>
__device__ void MyatomicAdd(T *address, T val){
};
template<>
__device__ void MyatomicAdd<float>(float *address, float val){
atomicAdd(address , val);
}
이제 컴파일러는 atomicAdd은() 내 전문에서 정의되지 않은 것을 불평 같은 적용 내가 어떤 CUDA 기능을 사용하려고 할 때 특수화 내에서 __syncthreads()를 사용하십시오. 어떤 아이디어? 감사.
잘못된 컴파일러로 특성화를 컴파일하려고하는 것 같습니다. 정말로 nvcc를 사용하고 있으며 컴파일되는 파일의 확장자가 .cu입니까? – talonmies
첫 번째 비특이적 인 예제와 두 번째 특수한 예제는 모두 같은 파일에 있습니다. 나는 두 번째 문장을 쓴 후에 첫 번째 예제를 주석 처리했다. 그것은 전문화에 특정한 문제 인 것을 보인다. – mjm26
문제는 내가 게시 한 코드를 커널에 파일로 저장하고 nvcc로 컴파일하면 오류가 없다는 것입니다. 그래서 당신이 우리에게 말하는 것을 게을리하고있는 뭔가 다른 것이 있습니다 .. – talonmies