我可以通过互操作使用 C++ dll 卸载到至强融核吗?

本文关键字:卸载 互操作 可以通过 dll C++ | 更新日期: 2023-09-27 18:33:07

我读到某些c ++ dll可以自动卸载到Xeon Phi,即使它们不是专门为使用manycore而制作的。

我的问题 - 我可以互操作使用 c# 的英特尔并行工作室构建的 c++ dll 吗?希望它会自动卸载

我可以通过互操作使用 C++ dll 卸载到至强融核吗?

我也对

你关于 dll 能够自动卸载到英特尔至强融核协处理器的说法感到困惑,"即使它们不是专门为使用众核而设计的"。若要自动卸载,库必须包含使用 offload 指令的代码,并使用识别 offload 指令的编译器进行编译。默认情况下,卸载指令会导致编译器生成处理器和协处理器可执行代码。

至于如何构建一个包含卸载代码的动态库,让我引用 Kevin Davis 在 software.intel.com 上发布的回复:

对于动态库,必须使用 -fPIC 编译器选项编译包含卸载语言扩展的所有源文件。在 IDE 下的属性设置下添加此选项: C/C++> 代码生成 [英特尔C++]> MIC 卸载编译器的附加选项>配置属性 .... 使用 icl 命令行时,必须使用/Qoffload-选项编译动态库中包含卸载代码的每个源文件,以传递 -fPIC 选项。

有一个限制,你不能在dll中使用_Cilk_offload指令,但我认为这是唯一的限制。

关于从 C# 调用包含卸载指令的库,英特尔®并行工作室 XE 2015 中存在一个问题,该问题已在更新 1 中修复。但除了编译器的一个版本之外,您应该能够调用包含卸载指令的动态库。

有一些 DLL,可以自动卸载到英特尔至强融核,例如英特尔 MKL。这些库可以与C++和C#链接(参见froth的答案(。

在此上下文中Automatic offload意味着库包含一个代码,该代码允许卸载其计算,对用户透明。

此外,库可能包含一些代码,这些代码将决定是在 CPU 还是协处理器上运行计算。