|
| 1 | +# FPGA Runtime for OpenCL documentation |
| 2 | + |
| 3 | +## OpenCL background |
| 4 | + |
| 5 | +[Khronos® OpenCL™] is a standard for writing programs that run across |
| 6 | +heterogeneous platforms consisting of FPGA, CPU, GPU, DSP, etc. The [Intel® FPGA |
| 7 | +Runtime for OpenCL™ Software Technology] implements the [OpenCL 1.2] standard |
| 8 | +including selected vendor extensions. |
| 9 | + |
| 10 | +## What is the FPGA runtime? |
| 11 | + |
| 12 | +The following components work together to program an [Intel® FPGA]: |
| 13 | + |
| 14 | +1. host program and host compiler |
| 15 | +2. OpenCL kernel(s) and offline compiler |
| 16 | +3. [Custom Platform] |
| 17 | + |
| 18 | +The runtime is mainly responsible for executing the host program (1) and |
| 19 | +queueing the kernel to be executed on the FPGA device. It takes in the hardware |
| 20 | +programming image from the compiler (2), builds the contained programs, |
| 21 | +allocates host/shared/device memory, programs devices, enqueues and executes the |
| 22 | +kernels, and collects kernel execution status signaled from the memory-mapped |
| 23 | +device ([MMD]). Each step is described in the following sections. |
| 24 | + |
| 25 | +## Why is the FPGA runtime needed? |
| 26 | + |
| 27 | +FPGA hardware design deals with I/O constraints, protocols, monitoring, DDR |
| 28 | +calibration, and memory dependencies. The FPGA runtime provides a layer of |
| 29 | +abstraction to ease the development flow. |
| 30 | + |
| 31 | +### Memory |
| 32 | + |
| 33 | +Each kernel execution may require accessing device memory. The device memory |
| 34 | +needs to be reserved/allocated before kernel execution. The runtime keeps track |
| 35 | +of the memory allocation. There are two main types of memory allocations: |
| 36 | +[Buffers] and Unified Shared Memory (USM). |
| 37 | + |
| 38 | +### Kernels |
| 39 | + |
| 40 | +Kernels are data-parallel functions that extend C99 for parallelism and memory |
| 41 | +hierarchy. |
| 42 | + |
| 43 | +### Queues |
| 44 | + |
| 45 | +Queues manage buffer mapping, memory migration, device programming, and kernel |
| 46 | +execution. A queue receives asynchronous command completion notifications from |
| 47 | +the device. A queue also manages dependencies between commands using events and |
| 48 | +barriers. |
| 49 | + |
| 50 | +### Profiling |
| 51 | + |
| 52 | +The runtime keeps track of the status of a kernel execution to record the |
| 53 | +wall time of each stage. This provides the user with insights into the |
| 54 | +performance of their program. |
| 55 | + |
| 56 | +## User flow |
| 57 | + |
| 58 | +For more information on how users interact with each of the above components, |
| 59 | +see the [Intel® FPGA SDK for OpenCL™ Pro Edition: Programming Guide]. |
| 60 | + |
| 61 | +## How to contribute |
| 62 | + |
| 63 | +To contribute to the runtime, see [CONTRIBUTING.md](../CONTRIBUTING.md). |
| 64 | +To build, test, and use the runtime, see [README.md](../README.md). |
| 65 | + |
| 66 | +[Khronos® OpenCL™]: https://www.khronos.org/opencl/ |
| 67 | +[OpenCL 1.2]: https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/ |
| 68 | +[Intel® FPGA]: https://www.intel.com/content/www/us/en/products/programmable.html |
| 69 | +[Intel® FPGA Runtime for OpenCL™ Software Technology]: https://github.com/intel/fpga-runtime-for-opencl |
| 70 | +[Intel® FPGA SDK for OpenCL™ Pro Edition: Programming Guide]: https://www.intel.com/content/www/us/en/docs/programmable/683846/ |
| 71 | +[Custom Platform]: https://www.intel.com/content/www/us/en/docs/programmable/683085/ |
| 72 | +[MMD]: ../include/MMD/aocl_mmd.h |
| 73 | +[Buffers]: buffers.md |
0 commit comments