用于 FPGA 编译内核的英特尔 OpenCL SDK 用于使用 aoc 命令进行仿真会给出链接器错误

Intel OpenCL SDK for FPGA compile kernel for emulation with aoc command gives linker error

我正在尝试编译内核以在英特尔 FPGA SDK 中使用 aoc 进行仿真,我已尽可能设置所有环境变量,甚至使用 SDK 中包含的 init_opencl.bat。 我 运行 以下行使用 visual studio 2017 开发人员命令 promt 以使用 visual studio 链接器:

aoc -march=emulator -v -board=a10gx my_kernel.cl -o my_kernel.aocx

但它总是会抛出链接器错误(错误是西班牙语的,抱歉)。

Creando biblioteca libkernel.lib y objeto libkernel.exp

libkernel.obj : error LNK2019: símbolo externo __imp___translate_sampler_initializer sin resolver al que se hace referencia en la función my_kernel

libkernel.obj : error LNK2019: símbolo externo floorf sin resolver al que se hace referencia en la función __acl__copysignf

libkernel.obj : error LNK2019: símbolo externo ceilf sin resolver al que se hace referencia en la función __acl__copysignf

libkernel.obj : error LNK2019: símbolo externo log2 sin resolver al que se hace referencia en la función __acl__sppow_approx

libkernel.obj : error LNK2019: símbolo externo exp2 sin resolver al que se hace referencia en la función __acl__sppow_approx

LINK : error LNK2001: símbolo externo _DllMainCRTStartup sin resolver

C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.16.27023\lib\x86\msvcrt.lib : warning LNK4272: el tipo de máquina de biblioteca 'x86' está en conflicto con el tipo de máquina de destino 'x64'

C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.16.27023\lib\x86\legacy_stdio_definitions.lib : warning LNK4272: el tipo de máquina de biblioteca 'x86' está en conflicto con el tipo de máquina de destino 'x64'

libkernel.dll : fatal error LNK1120: 6 externos sin resolver

我不知道还能做什么。

注意: 内核使用 image2d 对象,我不完全确定它是否与 FPGA 兼容。其实那是另一个问题。

问题很可能是他们(Altera,现在是英特尔)仍然需要 Windows 使用 MSVC 2010 才能成功 link 他们的库与宿主项目。

至少 fft-2d 有这样的要求。

所以你可能有两个选择:

  1. 安装 MSVC 2010

  2. 弄清楚如何成功地link使用 MSVC 2010

  3. 构建他们的库

更新

我检查了我的笔记。为了能够使用 VS 2015 成功地 link 使用 Altera 库,我还 link 使用 legacy_stdio_definitions.lib。那应该进入 linker 部分的 AdditionalDependencies。不能保证这对您的情况也有帮助,但值得一试。

首先感谢 doqtor 的回答...最后我终于能够编译而无需做太多更改....实际上如果您 运行 来自 Visual Studio Developers Command Prompt x64 大部分问题都解决了。

我决定彻底重新安装整个英特尔 FPGA SDK,这次正确设置了每个环境变量...一切都运行良好...我能够编译和执行 SDK 示例。

但是有一个问题无法解决....我的内核使用 image2d_t 个对象,当然还有 sampler_t...根据 Intel SDK 编程指南得出... SDK 在使用 OpenCL 1.0 时不支持图像和采样器。

奇怪的是 FPGA 仿真器平台确实支持它,所以我能够使用仿真器进行编译....虽然这对我来说解决不了太多问题......我决定更改我的内核并找到图像和采样器的替代品。

谢谢

回答您的问题:

  1. FPGA 仿真器不支持 x86 平台,只支持 x86_64(但我猜你已经解决了这个问题)。
  2. 关于图像。 SDK确实不支持图片类型,但这并不意味着aoc在编译过程中会失败。稍后当您尝试 运行 您的应用程序时将会失败。