In this article and of course in subsequent planned post we plan to see some insights into opencl and also its rapid adoption in varying fields of applications. To start with if you have not been introduced to opencl or would like to get a quick walk through of some of the fundamentals this post could be interesting read. What is also planned as an extension of this blog series is the fact that we would slowly move onto share some learnigs, quick ramp up techniques on the concepts and applying opencl to certain use cases and deploy them on FPGAs. So stay tuned to see what is coming up.
What is OpenCL? What is the need for another new framework ?
A long but very long existing topic that is time again been discussed is the fact that more applications should leverage the hardware support and run closer to the hardware than implementing them on pure software. Just to elaborate if you run a piece of an algorithm code at very high level in languages like C vs an implementation of the same using Hardware Description languages like VHDL/Verilog it is more or less established that the highest performance is achieved using the HDL approach. But nevertheless the area of using CPLD/FPGAs to implement sophisticated logic is not an easy trick to be mastered and this has more or less affected the adoption in a wider scale and staid also with some experts or i would say engineers who have the inclination/liking for such design flow.
Another trend that we see as the complexity of the applications grow there is more heterogeneous usage of different silicon in a applications like lets say a DSP, FPGA, CPU , Microcontroller ..etc. With this growing trend it is evident that there is a lot of things to learn and clearly having each piece of hardware being targeted individually and stitching them together is not a scalable solution and may also impact the development time.
OpenCL addresses this specific case and provides a framework to write programs and run them on heterogeneous programs.
Just as the wiki pages read:
OpenCL specifies programming languages (based on C99 and C++11) for programming these devices and application programming interfaces (APIs) to control the platform and execute programs on the compute devices. OpenCL provides a standard interface for parallel computing using task- and data-based parallelism.
In this series of articles we will first start to understand the steps necessary to get a setup up and running on both the host as well as on a target (in case its a CPU/FPGA) and then also work on some examples to benchmark and understand the whole process.
Please watch out for the next blog that is scheduled to go at the end of this week that should get you up and running on just using CPU to learn some opencl code.
In this series we also are planning to use a low cost evaluation board for OpenCL from Terasic (you will see more of these hardware on the tenet webstore soon ) . The one we will use would be the SOC kit
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=836
If you want to buy one of these please contact us at info@tenettech.com