【发布时间】: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