Вопрос в том, что: существует ли способ использования класса "вектор" в ядрах Cuda? Когда я пытаюсь, я получаю следующую ошибку:
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
Итак, есть способ использовать вектор в глобальном разделе? Недавно я попробовал следующее:
- создать новый проект Cuda
- перейти к свойствам проекта
- открыть Cuda C/С++
- перейдите на страницу
- измените значение в "Генерация кода" на это значение: compute_20, sm_20
........ после этого я смог использовать стандартную библиотечную функцию printf в своем ядре Cuda.
Есть ли способ использовать стандартный класс библиотеки vector
в том, как printf поддерживается в коде ядра? Это пример использования printf в коде ядра:
// this code only to count the 3s in an array using Cuda
//private_count is an array to hold every thread result separately
__global__ void countKernel(int *a, int length, int* private_count)
{
printf("%d\n",threadIdx.x); //it print the thread id and it working
// vector<int> y;
//y.push_back(0); is there a possibility to do this?
unsigned int offset = threadIdx.x * length;
int i = offset;
for( ; i < offset + length; i++)
{
if(a[i] == 3)
{
private_count[threadIdx.x]++;
printf("%d ",a[i]);
}
}
}