Код разгрузки Intel Xeon Phi + вектор STL

Я хотел бы скопировать данные, хранящиеся в векторе STL, в сопроцессор Intel Xeon Phi. В моем коде я создал класс, который содержит вектор с данными, необходимыми для вычисления. Я хочу создать объект класса на хосте, инициализировать данные на хосте, а затем я хочу отправить этот объект в сопроцессор. Это простой код, который иллюстрирует то, что я хочу сделать. После копирования объекта в сопроцессор вектор пуст. В чем может быть проблема? Как это правильно сделать?

#pragma offload_attribute (push, target(mic))
#include <vector>
#include "offload.h"#include <stdio.h>
#pragma offload_attribute (pop)

class A
{
public:
A() {}
std::vector<int> V;
};

int main()
{
A* wsk = new A();
wsk->V.push_back(1);

#pragma offload target(mic) in(wsk)
{
printf("%d", wsk->V.size());

printf("END OFFLOAD");
}
return 0;
}

0

Решение

Когда объект копируется в сопроцессор, только память самого этого элемента, который имеет тип A, std::vector выделяет отдельный блок памяти для хранения его элементов. Копирование поверх std::vector встроен в A не копирует свои элементы. Я бы рекомендовал не пытаться использовать std::vector непосредственно. Вы можете скопировать его элементы, но не сам вектор.

  int main()
{
A* wsk = new A();
wsk->V.push_back(1);

int* data = &wsk->V[0];
int size = wsk->V.size();

#pragma offload target(mic) in(data : length(size))
{
printf("%d", size);

printf("END OFFLOAD");
}
return 0;
}
2

Другие решения


По вопросам рекламы [email protected]