This guide provides quick steps to install the technical preview of Intel® FPGA Emulation Platform for OpenCL™, compile and run OpenCL kernels on the Emulator.
Intel® FPGA Emulation Platform for OpenCL™ technical preview includes the runtime and compiler, which runs on Intel® Core™ and Intel® Xeon® processors. It is capable of compiling and running programs written with Intel® OpenCL™ FPGA extensions (for example, with the FPGA 'channels' extension).
The emulator aims to provide:
This version of the emulator is a technical preview, and it does not provide full functional equivalence with an FPGA device. It is provided for evaluation purposes only without any warranties.
Supported OS:
Supported Hardware:
The runtime cannot create more than 4 threads per logical core (physical
cores with Intel® HT Technology). For example, if application executes
32 kernels simultaneously it will require at least 8 logical cores
(8 physical cores or 4 physical cores with HT
option
enabled).
To configure environment of current session for using OpenCL™ standalone binaries do the following steps:
.icd
file with following content as shown
below:echo /path/to/binaries/libintelocl_emu.so >> /etc/OpenCL/vendors/intel_fpga_fast_emu.icd
INSTALLDIR
variable in setupvars.sh
script to the path where binaries have been unpacked.If installation succeeded the following OpenCL™ platform will be available:
Platform [#1] :
Profile :
FULL_PROFILE
Version :
OpenCL 2.0 LINUX
Name :
Intel(R) FPGA Emulation Platform for OpenCL(TM) (preview)
Vendor :
Intel(R) Corporation
Devices :
1
Device [#1] :
Type :
accelerator
Profile :
FULL_PROFILE
Version :
OpenCL 2.0 (Build 5)
Name :
Intel(R) FPGA Emulation Device (preview)
Vendor :
Intel(R) Corporation
C version :
OpenCL C 2.0
Driver version
: 1.2.0.5
The emulator provides a separate OpenCL™ platform with one OpenCL™ CPU device. It supports Intel® FPGA OpenCL™ extensions.
OpenCL programs written for FPGA device can be compiled and executed
on this device, using standard OpenCL API (including clCreateProgramWithBinary()
,
see the Offline Compilation section).
There are sets of environment variable affecting emulator execution.
OCL_FPGA_EMU
- should be set to enable FPGA style
of channels. This environment variable is mandatory to use FPGA
specific extensions.OCL_TBB_NUM_WORKERS ([1..])
- maximum number
of threads which can be used by TBB.
VOLCANO_CPU_ARCH (core-avx2, skx)
- can be
set to force SIMD instruction set used for OpenCL kernel compilation
where skx corresponds to AVX-512 support
VOLCANO_CLANG_OPTIONS
- internal environment
variable allowing to force some options to OpenCL compiler. For
example:
-fopenmp -fintel-openmp -fopenmp-tbb
-
enables OpenMP* support
-ffast-math
- forces fast math built-ins
-DINTEL_OCL_FPGA_CPU_EMU
- adds corresponding
define to the OpenCL kernel
VOLCANO_LLVM_OPTIONS (-vector-library=SVML)
- Internal option that allows force usage of short vector math
library. Must be set if OpenMP support is enabled.
CL_CONFIG_USE_VECTORIZER (True, False)
- NDRange
vectorizer control. Does not affect OpenMP pragma vectorization
of single work-item kernels. Should be set to False
to speedup kernel compilation time.CL_CONFIG_CPU_FORCE_LOCAL_MEM_SIZE (e.g 256KB)
- amount of available OpenCL local memory.
KMP_AFFINITY
- affinity settings for OpenMP threads.
For example, "norespect,physical,20"
OMP_NUM_THREADS ([1..])
- Number of available
OpenMP threads Optimization guide using OpenMP is available in the directory with binaries (Optimization_guide.pdf).
The Emulator supports OpenCL™ kernels compilation into binaries (similar
to .aocx files used for FPGA device), which can be used in clCreateProgramWithBinary()
.
Use Intel® SDK for OpenCL™ Applications - offline compiler ('ioc64' tool) to compile kernel binaries for the emulator from OpenCL C source code. This tool is distributed as part of Intel® Code Builder for OpenCL™ API:
> ioc64 -bo='-cl-std=CL2.0' -device-fpga_fast_emu -input=source.cl
-ir=kernel_binary.elf
Name for the output file is arbitrary, and it can have .aocx extension to let a host program use the same names for both FPGA device and the emulator.
Kernel binaries produced by the 'ioc' tool are not compatible with binaries compiled for FPGA device and vice versa.
Set of environment variables mentioned in the Getting Started section can affect the emulator behavior.
Bash script (setupvars.sh
) distributed with binaries can
be used to simplify the environment setting. Please uncomment/modify value
for required variable in the script and run the command below:
> . /path/to/binaries/setupvars.sh
After that all application running in current console will use environment variables set in the script.
To generate the FPGA static reports on build perform the following steps:
After each build, the static reports is generated and listed in the
session tree as report.html
under Build Artifacts.
The static report menu is divided into three section:
The Source section shows an approximation of how a source code line affects the area usage.
The System section shows the closest approximation to the hardware that is implemented in the FPGA (the kernel is divided into logic blocks).
The Area Analysis data gives an insight into the generated hardware and offers suggestions on how to resolve potential inefficiencies.