英特尔MIC卸载 - 它如何与STL一起使用?

时间:2013-03-31 08:16:24

标签: c++ stl eigen icc intel-mic

我正在使用在C ++ / OpenMP代码中实现的system,它在整个地方使用STL和Eigen的数据结构。从算法上讲,代码似乎是使用新的英特尔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 个答案:

答案 0 :(得分:3)

您需要以下内容:

void __attribute__((target(mic))) computeIntensiveFunction(std::vector<sometype> myvar);

在您的来源中定义。这定义了MIC方面的功能,以便可以从卸载区域调用它。