Skip to content

Commit 90c549a

Browse files
sherry-yuanpcolberg
authored andcommitted
High level documentation for OpenCL Implementations
This documents what is fpga runtime for opencl, why it is important. It serves the purpose of landing page to navigate to other detailed pages that documents implementation details and contribution details. It also links to other documentations, khronos opencl 1.2 spec as well as the intel FPGA runtime user manual.
1 parent e1ff665 commit 90c549a

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

docs/README.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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

Comments
 (0)