Intel® FPGA SDK for OpenCL™ Pro Edition: 入门指南

ID 683188
日期 3/28/2022
Public
文档目录

3.6.4. 仿真OpenCL Kernel

若要仿真OpenCL™ kernel,需要在构建kernel的平台上运行.aocx仿真文件。OpenCL Emulator使用一个与面向FPGA硬件时不同的OpenCL平台。

请按照以下步骤对kernel进行仿真:

若要运行主机应用程序来进行仿真,需要调用 env CL_CONFIG_CPU_EMULATE_DEVICES=<number_of_devices> <host_application_filename> 命令。
此命令指定Emulator需要提供的相同仿真器件的数量。默认情况下,仿真器平台(emulator platform)提供一个仿真器件。因此,如果主机代码只要求一个器件,那么您不需要设置CL_CONFIG_CPU_EMULATE_DEVICES环境变量。

对于hello_world设计示例,请运行bin/host -emulator-emulator参数通知主机程序为OpenCL选择Intel® FPGA Emulation Platform。

成功仿真kernel之后,您会看到以下输出:
...
...
...

Using AOCX: hello_world.aocx

Kernel initialization is complete.

Launching the kernel...

Thread #2: Hello from Intel FPGA OpenCL Compiler!

Kernel execution is complete.
注:
  • Intel® FPGA SDK for OpenCL™ Pro Edition中的emulator是基于GCC 7.2.0,作为离线编译器的一部分进行构建的。当对一个仿真的OpenCL器件执行主机程序时,libstdc++.so的版本必须至少为GCC 7.2.0的版本。换言之, LD_LIBRARY_PATH 环境变量必须要确保能找到libstdc++.so的正确版本。

    如果未找到libstdc++.so的正确版本,那么对clGetPlatformIDs函数的调用将无法加载FPGA emulator platform,并返回CL_PLATFORM_NOT_FOUND_KHR (error code -1001)。根据找到的libstdc++.so版本,可能会成功地调用clGetPlatformIDs,但稍后对clCreateContext函数的调用可能会失败,返回CL_DEVICE_NOT_AVAILABLE (error code -2)

    如果LD_LIBRARY_PATH没有指向一个足够新的libstdc++.so,那么使用以下命令语句调用主机程序:

    env LD_LIBRARY_PATH=<path to sufficiently new libstdc++.so>:$LD_LIBRARY_PATH <host> [host arguments]
  • 若要使能kernel代码的调试,默认情况下,对FPGA emulator的优化是禁止的。在仿真kernel代码时,这会导致次优的执行速度。

    您可以将-g0标志传递给aoc编译命令以禁止调试并使能优化。这可以实现更快的仿真器执行速度。