0

How to add a value to a thrust::vector on the CUDA device ?

I want to do something like (push_back in kernel):

__global__ void genVect( thrust::device_vector<int> & D ) 
{
        int i = threadIdx.x + blockIdx.x * blockDim.x;
        int j = i*i*i;
        D.push_back( j ); // i need this method in kernel
}

int main(void)
{
    thrust::device_vector<int> D;
    genVect<<< 1, 10 >>>( D );
    for(int i = 0; i < D.size(); i++)  std::cout << D[i] << std::endl;
    return 0;
}

ok, i try differently

__global__ void genVect( int * p )
{
    int i = threadIdx.x + blockIdx.x * blockDim.x;
    int j = i*i*i;
    p->push_back( j ); // where is push_back() 
}

int main(void)
{
    thrust::device_vector<int> & D ; 
    int * pD = thrust::raw_pointer_cast(D.data());
    genVect<<< 1, 100 >>>( pD );
    for(int i = 0; i < 100; i++)  std::cout << D[i] << std::endl;
    return 0;
}
Faik Stack
  • 1
  • 1
  • 2

0 Answers0