Я пытаюсь использовать вектор объекта (класса A) в другом классе (класс B) и в конечном итоге использую эту информацию в ядре (Foo) для инициализации другого вектора (матрицы). Но когда я пытаюсь скомпилировать код, я получаю сообщение об ошибке:
sample.cu (47): ошибка: вызов функции __host__ ("thrust :: detail :: vector_base <:: A,std :: allocator <:: A>> :: operator [] ") из функции __global__ (" Foo ") не допускается 1 обнаружена ошибка при компиляции" /tmp/tmpxft_00011073_00000000-9_sample.cpp1.ii".
Может кто-нибудь, пожалуйста, помогите мне исправить это. У меня не возникает проблем, когда я использую вектор класса B в ядре сам по себе.
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/copy.h>
#include <iostream>
#include <cstdlib>
#ifdef __CUDACC__
# define HOST_DEVICE __host__ __device__
#else
#define HOST_DEVICE
#endif
class A {
public:
int a;
HOST_DEVICE A() {}
};
class B {
public:
int b;
thrust::host_vector < A > B_A;
HOST_DEVICE B() {}
};
__global__ void Foo(B * b, double * o) {
int i = threadIdx.x + blockIdx.x * blockDim.x;
o[i] = 2 * b[0].B_A[0].a;
}
int main() {
thrust::host_vector < B > H_B;
thrust::device_vector < B > D_B;
B * b_ptr = thrust::raw_pointer_cast(H_B.data());
thrust::device_vector < double > matrix(100);
double * o = thrust::raw_pointer_cast(matrix.data());
Foo << < 1, 2 >>> (b_ptr, o);
return 0;
}