首页 文章

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

提问于
浏览
2

我正在使用在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 回答

  • 3

    你需要这样的东西:

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

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

相关问题