We live in a world with an embarrassingly wonderful variety of choices when it comes to processors, monitors, video cards, and other components that make up the computers and devices we use every day. As a user, this variety is great because it encourages vendors to innovate and compete with one another, creating progressively more awesome hardware. As a programmer, this same variety is challenging because each vendor’s components use their own proprietary programming models and interfaces. Writing applications that perform correctly and efficiently on all that hardware would be overwhelmingly difficult without industry standard APIs. For example, just about every graphics accelerator vendor has a different way to program their chips or talk to their accelerators, which is why just about every video card vendor implements OpenGL, an industry standard graphics API. This then allows software developers to write applications that use OpenGL to take advantage of the wide variety of graphic accelerators found on users’ machines without having to write special code for each and every video card in the market.
Over the last ten years, hardware and software vendors have worked to figure out how to do for parallel programming and parallel processors what OpenGL did for graphics programming and graphics accelerator cards. CPU vendors now routinely introduce processors with multiple cores, hyperthreading, and other features that allow software to perform many operations at once. GPU vendors similarly design new chips designed to allow their massively parallel compute cores to perform general purpose programming tasks, in addition to the extreme graphics performance for which they were originally conceived. For a company like Adobe, whose applications need to squeeze every bit of performance and efficiency from every user’s machine, writing programs that run well on each vendor’s architecture and that take advantage of each vendor’s innovations would be inordinately difficult without an open, vendor-neutral API for parallel programming that was designed to address the variety of processors in the market today and yet to come. Thus is was that, five years ago, Khronos, the same industry consortium that governs OpenGL, convened a new working group to standardize just such an API, the Open Computing Language more commonly known as OpenCL.
I have the honor and pleasure of being Adobe’s voice and vote in the OpenCL working group. Because OpenCL, like its graphics cousin, OpenGL, is fundamentally implemented by hardware vendors, the OpenCL working group primarily consists of hardware companies. Consequently, I am often asked why Adobe is actively involved in creating an open standard for computing hardware. The answer is deceptively simple: a good, open standard for parallel computing helps us deliver better software, and merely hoping that OpenCL will be that standard without our input is wishful thinking.
We want to deliver software that is fun to use, runs fast, and consumes as little power as possible, something that is increasing more challenging in today’s fragmented world. We write desktop software that runs on Mac OS and Windows, mobile software that runs on iOS, Android, and Windows 8, and server software that runs on Windows and Linux. Our software uses chips built by different vendors, including NVIDIA, AMD, Intel, and ARM. We also have more than a decade’s worth of experience designing and developing parallel computing systems, Pixel Bender and Halide being two well known strategic investments Adobe made in this space. Through those experiences, we gained a hard-won perspective that we can be even more successful by joining forces with the community at large, that using an open standard makes our jobs a lot easier – writing great software that runs on different operating systems, form factors, and chip sets – and allows us to spend more time building software that runs quickly and efficiently on your computers and devices.
Returning to the original question, we know that open standards are good for the industry and enables us to most easily write great software that runs well on the widest variety of hardware. Even though Adobe does not build hardware and, therefore, does not implement OpenCL, we use OpenCL and we know what features we need, from OpenCL and from OpenCL hardware, to enable us to build even more compelling and efficient applications. So, we openly participate in the discussion to develop the standard, adding our experience, perspective, and vision for creating great software running on great hardware, with the goal of shaping and influencing OpenCL to evolve in a way that is advantageous to Adobe’s customers. With our continued participation and influence, and with the cooperation and support of our vendor partners, Adobe has high hopes for the power of the computers and devices in your future, and for the capability, efficiency, and experience of the software you’ll run on them.
Sr. Engineering Manager