我正在使用在C / OpenMP代码中实现的system,它在整个地方使用STL和Eigen的数据结构 . 从算法上讲,代码似乎是使用新的Intel MIC(Xeon Phi)卡加速的理想选择 .
代码中的典型并行循环如下所示:
#pragma omp parallel for private(i)
for (i = 0; i < n; ++i) {
computeIntensiveFunction(some_STL_or_eigen_container[i]);
上面的伪代码以合理的性能运行,但将其中的一些卸载到Xeon Phi卡上会很棒 . 这是我尝试这样做的:
#pragma offload target (mic) // <---- NEW
#pragma omp parallel for private(i)
for (i = 0; i < n; ++i) {
computeIntensiveFunction(some_STL_or_eigen_container[i]);
但是,英特尔ICC / ICPC编译器会发出如下错误: error: function "computeIntensiveFunction" called in offload region must have been declared with compatible "target" attribute.
似乎这样的抱怨出现在涉及STL或Eigen的函数和数据结构中 .
有关如何绕过这个的任何想法?
我是新手使用Xeon Phi(恢复CUDA程序员),所以我不完全理解“什么可以卸载?”的界限 .
1 回答
你需要这样的东西:
在你的来源中定义 . 这定义了MIC方面的功能,以便可以从卸载区域调用它 .