추력을 사용하여 host_vector의 세 번째 위치에 하나의 값을 삽입하려고합니다.추력을 사용하여 host_vector에 삽입
static thrust::host_vector <int *> bins; int * p; bins.insert(3, 1, p);
그러나 점점 오전 오류 :
error: no instance of overloaded function "thrust::host_vector<T, Alloc>::insert [with T=int *, Alloc=std::allocator<int *>]" matches the argument list argument types are: (int, int, int *) object type is: thrust::host_vector<int *, std::allocator<int *>>
사람이 전에 본 적이, 나는이 문제를 어떻게 해결할 수 있습니까? 나는 벡터를 사용하여 정보를 GPU에 전달하려고합니다. 나는 처음에는 벡터의 벡터를 사용하여 다른 수의 데이터를 보유하는 공간 셀을 나타내지 만 추력에서는 불가능하다는 것을 알게되었습니다. 대신 공간 데이터로 정렬 된 데이터를 보유하는 벡터 bins
을 사용하고 있습니다 (처음 세 값은 첫 번째 셀, 두 번째 셀은 두 번째 셀, 다음 세 번째 셀은 0 등) . 보유 된 값은 입자에 대한 포인터이며 공간 셀의 입자 수를 나타냅니다 (런타임 전에는 알 수 없음). 댓글에서 언급 한 바와 같이
'통과 시키면 코드가 작동하지 않습니다. st :: host_vector'를'std :: vector'와 비교해 보았습니다. 그래서 왜 그것이 추력으로 작동 할 것이라고 생각하는지 모르겠습니다. 첫 번째 인수는 반복자 (iterator)로되어 있습니다. 그래서'bins.insert (3,1, p);를'bins.insert (bins.begin() + 3, 1, p)로 변경하면, 컴파일 할 필요가 있다고 생각합니다. 표준 벡터 삽입물 [문서] (http://www.cplusplus.com/reference/vector/vector/insert/)을 공부하고 싶을 수도 있습니다. –
제쳐두고, 나는 당신이 작업하기가 다소 어려운 포인터 벡터를 발견 할 것이라고 생각하지만, 당신이 묻는 질문은 아닙니다. 입자에 대한 포인터의 벡터가 아니라 단지 입자 벡터를 사용하면 내 충고가 될 것입니다. –