Foreword 1

"The free lunch is over."

The history of computing has entered a new era. Until a few years ago, the CPU clock speed determined how fast a program will run. I vividly recall having a discussion on the topic of software performance optimization with a System Engineer back in 2000, to which his stance was, "the passing of time will take care of it all," due to the improving technology. However, with the CPU clock speed leveling off at around 2005, it is now solely up to the programmer to make the software run faster. The free lunch is over. The processor venders have given up on increasing CPU clock speed, and are now taking the approach of raising the number of cores per processor in order to gain performance capability.

In recent years, many multi-core processors were born, and many developing methods were proposed. Programmers were forced to grudgingly learn a new language for every new type of processor architecture. Naturally, this caused a rise in demand for one language capable of handling any architecture types, and finally, an open standard was recently established. The standard is now known as "OpenCL".

With the khronos group leading the way (known for their management of the OpenGL standard), numerous vendors are now working together to create a standard framework for the multi-core era.

Will this new specification become standardized? Will it truly be able to get the most out of multi-core systems? Will it help take some weight off the programmer's shoulders? Will it allow for compatible programs to be written for various architectures? Whether the answers to these questions become "Yes" or "No" depends on the efforts of everyone involved. The framework must be designed to support various architectures. Many new tools and libraries must be developed. It must also be well-received by many programmers. This is no easy task, as evidenced by the fact that countless programming languages continually appear and disappear. However, one sure fact is that a new standard developing method is necessary for the new multi-core era. Another sure fact is that "OpenCL" is currently in the closest position to becoming that new standard.

The Fixstars Corporation, who authors this book, has been developing softwares for the Cell Broadband Engine co-developed by Sony, Toshiba, and IBM, since 2004. We have been awed by the innovative idea of the Cell B.E. enough to battle its infamously difficult hardware design, in order to see the performance capability of the processor in action. We have also been amazed by the capability of the GPU, when its full power is unleashed by efficient usage of the hundreds of cores that exist within. Meanwhile, many of our clients had been expressing their distaste for the lack of standards between the different architectures, leading us to want an open framework. Therefore, "OpenCL" is a framework that developed solely out of need.

OpenCL is still in its infancy, and thus not every need can be fulfilled. We write this book in hopes that the readers of this book learns, uses, and contribute to the development of OpenCL, and thus become part of the ongoing evolution that is this multi-core era.

Fixstars Corporation

Chief Executive Officer

Satoshi Miki