Pytanie brzmi: czy istnieje sposób użycia klasy "wektor" w jądrze Cuda? Gdy próbuję, pojawia się następujący błąd:Używanie std :: vector w kodzie urządzenia CUDA
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
A więc sposób na wykorzystanie wektora w sekcji globalnej? Niedawno próbowałem następujące:
- utworzyć nowy projekt Cuda
- przejdź do właściwości projektu
- otwarty Cuda C/C++
- iść do urządzenia
- zmienić wartość w „Kodeksie Generacja ", aby ustawić tę wartość: compute_20, sm_20
........ po tym czasie mogłem użyć funkcja standardowej biblioteki printf w moim jądrze Cuda.
Czy istnieje sposób użycia standardowej biblioteki klasy vector
w sposobie, w jaki printf jest obsługiwany w kodzie jądra? To jest przykład użycia printf w kodzie jądra:
// this code only to count the 3s in an array using Cuda
//private_count is an array to hold every thread's result separately
__global__ void countKernel(int *a, int length, int* private_count)
{
printf("%d\n",threadIdx.x); //it's print the thread id and it's 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]);
}
}
}
+1 doskonale legit pytanie (nie wiem, dlaczego został przegłosowany. Niestety odpowiedź jest jeszcze. – harrism