【问题标题】:Intel MIC offloading -- how does it work with STL?英特尔 MIC 卸载——它如何与 STL 一起工作?
【发布时间】:2013-03-31 08:16:24
【问题描述】:

我正在使用一个用 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 程序员)的新手,所以我不完全理解“可以卸载什么?”的界限。

【问题讨论】:

  • 嗯,看来-offload-attribute-target=mic 标志可能是这里解决方案的一部分。

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


【解决方案1】:

你需要这样的东西:

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

在您的源代码中定义。这定义了 MIC 方面的函数,以便可以从卸载区域调用它。

【讨论】:

  • 这样函数就被定义在麦克风方面。没有它,你就会调用一个未定义的函数。
  • 酷,这应该是你答案的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多