C++ 如何使intel TBB库在Xeon Phi上可用

C++ 如何使intel TBB库在Xeon Phi上可用,c++,tbb,xeon-phi,C++,Tbb,Xeon Phi,我试图在Xeon Phi卸载代码段中使用Intel TBB。代码无法编译,错误为:*MIC*无法打开源文件“tbb\parallel\u for.h” 我安装了MPSS堆栈,运行了binutils.msi实用程序,卸载的代码文件顶部包含的内容如下: #include <offload.h> #pragma offload_attribute(push, target(mic)) #include <tbb\parallel_for.h> #pragma offload_a

我试图在Xeon Phi卸载代码段中使用Intel TBB。代码无法编译,错误为:*MIC*无法打开源文件“tbb\parallel\u for.h”

我安装了MPSS堆栈,运行了
binutils.msi
实用程序,卸载的代码文件顶部包含的内容如下:

#include <offload.h>
#pragma offload_attribute(push, target(mic))
#include <tbb\parallel_for.h>
#pragma offload_attribute(pop)
//other includes and code follows

卸载编译器基本上由在同一代码上分别调用的两个(非常)不同的编译器组成。它们通常都有自己的命令行、include和库路径;并不是所有的命令行选项都从主机转换到MIC编译器。对于TBB,编译器有一个特殊的选项
/Qtbb
或只
-TBB
,它负责两个编译器的所有路径

请参阅
tbb\examples\GettingStarted\SUB\u STRING\u FINDER\SUB\u STRING\u FINDER\u extended.cpp
了解如何从卸载区域使用tbb。查看
Makefile
,了解如何构建示例

为了从MSVC环境运行代码,您需要设置与用于构建GettingStarted\Sub_string_finder示例的英特尔编译器相同的环境。复制MSVC内部环境的简单方法是从示例所在的同一控制台窗口运行它:


或者具体地说,您需要设置
MIC\u LD\u LIBRARY\u PATH
环境变量,以指向如图所示的MIC TBB二进制文件。

是否将头的位置添加到include PATH?@Captain Obvilous我相信您所说的是在运行
binutils.msi
实用程序时完成的,尽管我不是肯定的。如果不是,我该如何尝试对Xeon Phi执行此操作?标记为共享的150
类可能没有大小不是8的multipe的基类,并且具有多个基类的
类可能没有标记为共享的
警告正常?这不起作用,但是它会编译。是否使用Makefile进行编译?例如,类似于
nmake offload=mic
?请注意以下用于构建卸载的命令行键:
/D_utbb_MIC_offload/Qdiag disable:333534403441
。让我澄清一下:我已经看过了示例代码,据我所知,我现在正在MSVS项目中做同样的事情,但它不起作用。makefile具体做了哪些与卸载机制相关的工作?除了向编译器添加/Qtbb之外,还有更多的工作要做吗?我明白了,这是一个运行时问题。设备上的应用程序无法解析TBB符号。请尝试如下设置MIC_LD_LIBRARY_PATH环境变量(为英特尔编译器环境设置):
#pragma offload target(mic:0) in(nums) out(results)
tbb::parallel_for<int>(0,ARRAY_SIZE,1,[&](int i)
{
    results[i] = findZero(nums[i]);
});