OpenCL Video Tutorial: High-Level Overview

I have uploaded my first video to YouTube!

I have not been happy with the OpenCL training material I have seen, so I prepared an outline for an imaginary university course.   My plan is to upload material to YouTube on a variety of OpenCL topics so that you too will be an expert by the time I’m finished.  I am looking for a company to sponsor this work.

Better OpenCL Documentation

I have launched openclreference.com, which is inspired by cppreference.com.  My objective is to create community-maintained OpenCL documentation that supplements the official standard.  I need help from the community to populate this site with content, so if you have some spare time please consider contributing.  I will also mention that the best way to learn OpenCL is to read the standard and contribute to the community documentation.

I personally will try to avoid writing documentation about the function specifications of OpenCL, and attempt to write more advanced pages on topics like OpenCL design patterns, and GPU architecture.  Let’s see how far we can get with this new site!

OpenCL 2.0: SPIR Feedback and Vision

OpenCL 2.0 Feedback Series:

  1. OpenCL Standardization Issues
  2. My OpenCL Vision and Philosophy
  3. OpenCL 1.3: My Proposal For a Final 1.x Release
  4. OpenCL 2.0: SPIR Feedback and Vision (this article)

The SPIR 1.2 provisional specification is critical to the success of OpenCL because it provides freedom to the software community to explore new device languages. Personally, I have my own ideas for new device languages and abstractions but I have been unable to explore them due to inflexibility within the OpenCL standard. Although SPIR 1.2 is close to what I want, it isn’t quite good enough. In this article I am going to outline what I want SPIR to be, so that I can stop complaining and start developing software.

 

Continue reading OpenCL 2.0: SPIR Feedback and Vision

OpenCL 1.3: My Proposal For a Final 1.x Release

OpenCL 2.0 Feedback Series:

  1. OpenCL Standardization Issues
  2. My OpenCL Vision and Philosophy
  3. OpenCL 1.3: My Proposal For a Final 1.x Release (this article)
  4. OpenCL 2.0: SPIR Feedback and Vision

I propose that OpenCL 1.3 should be developed as the final 1.x version release. OpenCL 1.3 would provide minor enhancements and clarifications to OpenCL 1.2, and would defer major changes to OpenCL 2.0. My rationale for this proposal is fairly straightforward. First, there are already applications that use OpenCL and could benefit immediately from useful enhancements, without major conceptual changes. Second, I feel strongly that the OpenCL standard would greatly benefit from an open debate regarding its future. This debate may lead to major and disruptive changes in OpenCL 2.0 that would require major refactoring of existing software. OpenCL 1.3 would provide developers with an opportunity to develop useful software with the understanding that “something big” is coming.

Continue reading OpenCL 1.3: My Proposal For a Final 1.x Release

My OpenCL Vision and Philosophy

OpenCL 2.0 Feedback Series:

  1. OpenCL Standardization Issues
  2. My OpenCL Vision and Philosophy (this article)
  3. OpenCL 1.3: My Proposal For a Final 1.x Release
  4. OpenCL 2.0: SPIR Feedback and Vision

In my last article, I criticized OpenCL for lacking a published vision or philosophy which unifies the community and provides a litmus test for features. I would like to outline my vision for OpenCL with a new low-level library model, and a potential philosophy. I have inferred my own OpenCL philosophy from the published standards and vendor documentation, however in this article I am going to put forward a different philosophy. If you disagree with me, please post an articulate comment to this article. If you write a response to my article, contact me and I will update this entry with a link back to you. My intention is to spark a real public debate on the future of OpenCL.

Continue reading My OpenCL Vision and Philosophy

OpenCL: Standardization Issues

OpenCL 2.0 Feedback Series:

  1. OpenCL Standardization Issues (this article)
  2. My OpenCL Vision and Philosophy
  3. OpenCL 1.3: My Proposal For a Final 1.x Release
  4. OpenCL 2.0: SPIR Feedback and Vision

OpenCL 2.0 was recently released as a provisional specification, and developers have been given an opportunity to provide feedback.  I am writing a series of articles to address technical issues with the specification, but this particular article is going to focus on issues with the standardization process itself.  Sometimes, technical people focus on technical issues rather than the non-technical ones that might be causing even bigger problems for a project or group.  I would like to address all of the non-technical issues here, so that I can move on to focus on the more interesting technical aspects of OpenCL.

Continue reading OpenCL: Standardization Issues

Introduction to AJ Guillon

Hello! I’d like to welcome you to my blog, and introduce myself. My official name is Adrien Joel, but my common name “AJ” was assigned to me by Texas relatives who could not easily pronounce a French name. I was born and raised in Barrie, Ontario. I have spent my entire life around computers. I learned to type before I learned to hand-write, and learned the alphabet, how to read, and basic arithmetic on a PC. I completed a bachelors degree at the University of Toronto, where I focused on mathematics and computer science. Today, I enjoy computer science as both a profession and a hobby. I am an avid swimmer, and water polo player. I also enjoy rock climbing and photography, though I have found little time to do either lately.

Professionally, I find myself at the intersection of computer science, software engineering, and computer architecture. This means that I spend my time working on things that are theoretically sound (computer science), practical (software engineering) and have good performance (computer architecture). I have been fascinated by parallel computing for a long time. From a theoretical perspective, I am interested in problems such as P = NC, and frequently ask myself why parallel programming is hard. From a software engineering perspective, I often wonder how the average developer is ever going to write high-performance software with good design! Computer architecture motivates me to ensure that I deliver software with benchmarked performance results, potentially tuned to specific hardware for best speed. I have been working on a new approach to parallel programming which is radically different from anything attempted to date (considering the colossal number of failed approaches, it would have to be).

I consider myself an expert at parallel programming, GPU programming, OpenCL, and C++. My background in mathematics and computer science mean that I enjoy algorithm design and analysis. I have a deep appreciation for Edsger Dijkstra’s philosophy of programming, which means that I take great care to ensure that my programs are correct and that I could provide a mathematical proof if necessary. I am quite capable of designing and implementing very fast wait-free algorithms and data-structures, though it can take a long time to do something radically new. I greatly admire Alexander Stepanov’s views on software development.

Although I have a deep appreciation for computer science (a theoretical field), I also understand real-life software. I have considerable experience with software engineering, and designing systems based on user needs. I will not attempt to classify myself into any particular camp of software engineering, since I believe strongly that successful development teams may use a variety of approaches even in the same project. I consider design to be a complex and iterative process, which requires attentive feedback from potential users or customers. There is no silver bullet. Software development is hard, and this is unfortunately an unpopular view with those who think software is one methodology away from simplicity.

I am interested in business, and have co-founded two companies. One moderately successful, and one a complete failure. Today, I am weighing my options to consider joining an existing company or to attempt founding yet another business. I have my own ideas, and I would like to continue my parallel programming research. For now, I am available as a technical consultant to help companies however I can. Feel free to contact me if you are looking for an expert!

I am going to use this blog to discuss topics relevant to my interests, and to demonstrate my products and skills. I hope to use this as a platform for technical marketing, so that potential clients have an opportunity to see examples of my work and capabilities.