OpenCL, a programming environment based on a specialized dialect of C, enables a high-level approach to the design of high-performance computing elements, bringing a boatload of design management advantages along for the ride. In short, OpenCL is an open industry standard for programming systems built up of heterogeneous processors including CPUs, GPUs, FPGAs, and other discrete computing devices. No doubt, the ability to target all such devices via a single programming platform and model will have a tremendous impact on system design going forward.
OpenCL kills two birds with one stone: 1) it makes it easy for software developers to exploit heterogeneous processors for what they respectively do best in the quest for ever higher levels of performance; and 2) it advances the cause of parallel programming—a paradigm that is absolutely essential to getting past the roadblocks inherent to the conventional von Neuman approach to computing. These benefits combine in a powerful way when OpenCL code is targeted for implementation in FPGAs, which lend themselves extremely well to massively parallel computing applications.
So how does it work? You begin by identifying those aspects of an application program or algorithm that can—or should—be processed in a parallel manner. Each of these identified routines, then, is coded as an OpenCL “kernel.” The host program (running in a typical X86 environment) simply calls the kernel (running on the FPGA-based accelerator), which returns its results when complete. It’s that simple.
Learn more about the many benefits of OpenCL in the whitepaper, 10 Reasons OpenCL will Change Your Design Strategy.