Новичок в программировании на CUDA и gpu, возникла проблема с копированием массива указателей объектов на устройство.
У меня есть вектор указателей на объекты, каждый объект содержит два вектора, с которыми я буду работать в коде устройства .
Мне нужно как-то скопировать этот массив в память устройства, однако, прочитав похожие решения, я все еще не могу понять.
Это структура объекта, я работаю с:
std::vector<int> retVals;
std::vector<int> children{4};
Итак, мне не только нужно сделать копию массива, мне также нужно преобразовать эти векторы в массив int в каждом объекте.
EDIT:
Вот что я придумал до сих пор:
auto **nodesPtr = ( aho_corasick::Node**)malloc(a->nodes.size() * sizeof(aho_corasick::Node *));
int i = 0;
for (auto &node: a->nodes){
auto *newNode = new aho_corasick::Node(' ');
cudaMalloc((void**)&(newNode->cudaChildren), sizeof(int) * node->children.size());
cudaMemcpy(newNode->cudaChildren, node->children.data(), sizeof(int) * node->children.size(), cudaMemcpyHostToDevice);
cudaMalloc((void**)&(newNode->cudaRets), sizeof(int) * node->retVals.size());
cudaMemcpy(newNode->cudaRets, node->children.data(), sizeof(int) * node->retVals.size(), cudaMemcpyHostToDevice);
aho_corasick::Node* devNode;
cudaMalloc((void**)&devNode, sizeof(aho_corasick::Node));
cudaMemcpy(devNode, newNode, sizeof(aho_corasick::Node), cudaMemcpyHostToDevice);
nodesPtr[i++] = devNode;
}
aho_corasick::Node **devNodes;
cudaMalloc((void **)&devNodes, a->nodes.size() * sizeof(aho_corasick::Node *));
cudaMemcpy(devNodes, nodesPtr, a->nodes.size() * sizeof(aho_corasick::Node *), cudaMemcpyHostToDevice);
По-прежнему, похоже, не работает
Кроме того, насколько плох такой код в терминах CUDA, и как мне go вокруг массива указателей?
EDIT2 :
Забыл указать: я добавил два дополнительных поля в свои объекты: два массива int и для l oop я создаю новый объект, в который я копирую два соответствующих вектора (в поля массива int), а после этого я создаю новый объект в памяти устройства с этими полями.
Затем, после l oop, я выделяю массив указателей объектов i n память устройства.