Developer Guide,

  • ,
  • 2020 Update 2
  • 07/16/2020
  • Public Content,
  • Download as PDF

Intel® FPGA Emulation Platform for OpenCL™ Getting Started Guide

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.
About the Intel® FPGA Emulation Platform for OpenCL™
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:
  • rapid compilation time (seconds)
  • source code portability between emulator and FPGA
  • reasonable performance (average benchmarks run at 5x-10x slowdown in comparison with FPGA hardware)
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.
System Requirements
Note
The runtime cannot create more than four 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).

Installing Intel® FPGA Emulation Platform for OpenCL™ Technical Preview

To configure environment of current session for using OpenCL™ standalone binaries do the following steps:
  1. Unpack provided binaries to any working directory
  2. Create new
    .icd
    file with following content as shown below:
    echo /path/to/binaries/libintelocl_emu.so >> /etc/OpenCL/vendors/intel_fpga_fast_emu.icd
  3. Set
    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

Getting Started with Intel® FPGA Emulation Platform for OpenCL™ Technical Preview  

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.
  • The set of emulator specific libraries:
    • 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.
  • OpenCL related environment variables:
    • 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.
  • OpenMP environment variables (see OpenMP documentation for details):
    • 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
).

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.