저는 CUDA를 처음 사용하고 있으며 사용법을 배우려고합니다. 누군가 도와 주실 수 있습니까? 내가 메인 함수에 다음과 같은 한 (내가 비주얼 스튜디오에서 오전 내 소스와 헤더 파일은 .CU을하고 각각 .cuh)thrust :: device_vector in CUDA
thrust::device_vector<float> d_vec(100);
kernel<<<100,1>>>(d_vec);
다음 커널에 내가 가지고
template <typename T> __global__ kernel(thrust::device_vector<T> d_vec)
{ int tid = threadIdx.x + blockIdx.x*blockDim.x;
T xxx = 3.0;
d_vec[tid] = xxx;
}
내 목표는 float로 커널을 한 번, double로 한 번 호출하는 것입니다. 또한이 간단한 예제에서는 변수 xxx (실제 사례에서는 이중 또는 부동 소수점 숫자를 생성하는 일부 계산)가 있음에 유의하십시오.
내가 얻을 개의 오류 : 1>을 __global__
함수로부터 __host__
함수 (연산자 =)을 호출하는 것은 허용되지 않는 __global__
함수로부터 __host__
함수 (연산자 [])를 호출> 2 허용되지
그래서 "d_vec [tid] = .."의 "[]"및 "="문제가 있습니다. 하지만 내 질문은 어떻게 내 커널 내부 장치 벡터에 액세스 할 수 있습니다. 어떤 사람이 올바른 절차와 내가 뭘 잘못하고 있는지 명확히 해 주실 수 있습니까? 미리 감사드립니다.
나는 또한 아마 내가 잘하지 못하는 것을하고 있음을 깨달았다. 내 벡터가 60000 요소라고 말하는 것은 아주 큽니다. 이상적으로 나는 60000 커널을 생성하고 각 커널 계산의 결과를 벡터의 적절한 인덱스에 복사하려고합니다. 하지만 60000 벡터를 각각 60000 벡터로 생성하고 싶지 않습니다. (잘하면이 코드는 내 코드에서 발생하지 않습니다.) – user1612986