我想在一段Xeon Phi卸载代码中使用英特尔TBB . 代码无法编译,错误 error : *MIC* cannot open source file "tbb\parallel_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
为什么这会失败?
我需要更改为卸载并成功运行我的代码?
EDIT :
将 -tbb
选项添加到"Additional Options for MIC Offload Compiler"之后,编译器找到了 <tbb\parallel_for.h>
文件但是它提供了几个警告和有关tbb库代码未标记为共享的错误 . 以下是我的卸载代码段 .
#pragma offload target(mic:0) in(nums) out(results)
tbb::parallel_for<int>(0,ARRAY_SIZE,1,[&](int i)
{
results[i] = findZero(nums[i]);
});
1 回答
卸载编译器基本上由两个(非常)不同的编译器组成,这些编译器在相同的代码上单独调用 . 它们中的每一个通常都有自己的命令行,包含和库路径;并非所有命令行选项都从主机转换为MIC编译器 . 对于TBB,编译器有特殊选项
/Qtbb
或只有-tbb
,它负责两个编译器的所有路径 .有关如何从卸载区域使用TBB,请参阅
tbb\examples\GettingStarted\SUB_STRING_FINDER\sub_string_finder_extended.cpp
. 并查看Makefile
以了解如何构建示例 .为了从MSVC环境运行代码,您需要设置与用于构建GettingStarted \ Sub_string_finder示例的英特尔编译器相同的环境 . 在MSVC中复制环境的简单方法是从示例工作的同一控制台窗口运行它:
或者,具体来说,您需要将
MIC_LD_LIBRARY_PATH
环境变量设置为指向MIC TBB二进制文件,如here for other libraries所示 .