C++ 英特尔话筒卸载——如何与STL配合使用?

C++ 英特尔话筒卸载——如何与STL配合使用?,c++,stl,eigen,icc,intel-mic,C++,Stl,Eigen,Icc,Intel Mic,我使用的是一个用C++/OpenMP代码实现的,它到处都使用STL和的数据结构。从算法上讲,这段代码似乎是新英特尔MIC()卡加速的最佳候选 代码中典型的并行循环如下所示: #pragma omp parallel for private(i) for (i = 0; i < n; ++i) { computeIntensiveFunction(some_STL_or_eigen_container[i]); #专用pragma omp并行(i) 对于(i=0;i

我使用的是一个用C++/OpenMP代码实现的,它到处都使用STL和的数据结构。从算法上讲,这段代码似乎是新英特尔MIC()卡加速的最佳候选

代码中典型的并行循环如下所示:

#pragma omp parallel for private(i)
    for (i = 0; i < n; ++i) {
        computeIntensiveFunction(some_STL_or_eigen_container[i]);
#专用pragma omp并行(i)
对于(i=0;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]);

#pragma卸载目标(mic)//您需要类似以下内容:

void __attribute__((target(mic))) computeIntensiveFunction(std::vector<sometype> myvar);
void uuu属性uuu((目标(mic)))计算内容函数(std::vector myvar);

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

Hmm,似乎标志
-offload attribute target=MIC
可能是这里解决方案的一部分。因此,函数在事物的MIC端定义。没有它,您就可以对未定义的对象进行函数调用功能。酷,这应该是你答案的一部分。