Мой вопрос
Может ли код области разгрузки содержать объекты c ++? или просто STL?
Документация #pragma offload
от Intel C ++ Compiler XE 13.1 Не указывайте никаких ограничений для выгруженного оператора.
Добавление #pragma offload_attribute (push, target (mic))
может понадобиться для занятий, как в примерах из ссылка offload_attribute:
Указывает, что все функции и переменные, объявленные после прагмы, доступны в сопроцессоре. Эта прагма относится только к архитектуре Intel® MIC Architecture.
fileB.cpp
#pragma offload_attribute (push,target(mic)) #include "fileA.h"class B : public A {
...
};
#pragma offload_attribute (pop)
Но в то же время книга Высокопроизводительное программирование Intel Xeon Phi Coprocessor (Джим Джефферс и Джеймс Рейндерс, Морган Кауфманн, ISBN 9780124104143) говорит, что в режиме «Pragma Offload»Функции C ++ могут быть вызваны, но классы C ++ не могут быть переданы» а также
Этот акцент на плоских или некомплексных структурах данных позволяет нам точно указать, какие блоки данных необходимо передавать в и из сопроцессора. Конечно, данные, которыми не обмениваются, не имеют ограничений и могут быть произвольно сложными, включая многомерные массивы, классы C ++ любых типов и любую композицию структур данных с использованием указателей, массивов и структур.
В «Модели совместно используемой виртуальной машины» таких ограничений нет, вы можете использовать классы на стороне MIC и получать к ним доступ из MIC.
Других решений пока нет …