thrust :: device_vector в CUDA [дубликат]
На этот вопрос уже есть ответ:
Надежность внутри написанных пользователем ядер 4 ответаЯ новичок в CUDA и пытаюсь изучить использование. Может кто-нибудь, пожалуйста, помогите. У меня есть следующее в основной функции (я нахожусь в Visual Studio, и мои исходные и заголовочные файлы .cu и .cuh соответственно)
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;
}
ель @my - вызывать ядро один раз с плавающей точкой и один раз с двойным. Также обратите внимание, что в этом простом примере у меня есть переменная ххх (которая в моем реальном случае является некоторым вычислением, производящим двойные числа или числа с плавающей запятой).
и я получаю две ошибки: 1> вызов__host__
function (operator =) из__global__
функция не разрешена 2> вызов__host__
function (оператор []) из__global__
функция не разрешена
Так что я думаю, "[]" и "=" в "d_vec [tid] = .." - это проблема. Но мой вопрос - как мне получить доступ к вектору устройства внутри моего ядра? Может кто-нибудь уточнить, пожалуйста, что такое правильная процедура и что я делаю не так. заранее спасиб