Computational Intelligence Research Lab
Graphics Processor Unit (GPU) Site

IMPORTANT: READ ME FIRST!
Welcome to the CIRL GPU website. Below are tutorials, seminars, and other misc resources designed to help you get into general purpose GPU programming.

This site was put online a while ago (2005 or 2006-ish), so we have a fair amount of Cg programming up here (Graphics API-based GPU programming, such as our FCM implementations), we do cover a little bit of GLSL (look at our geometry shader examples, which are geared towards graphics, not CI at the moment), and we are now opening the site up to CUDA (we have a fuzzy logic example and soon we will put a fuzzy logic image processing example up when the paper is accepted).

There is a fair amount of initial overhead related to understanding GPU programming, design, and architecture. The newest trend/API that we would reccomend is NVIDIA's CUDA language (link). Getting a GPU program running is one thing, but getting the full performance of the device requires experience (such as how to design the program structure to maximize speed w.r.t. to operations such as ping-ponging, reduction, memory types and related access speeds, taking advantage of the SIMD architecture, CUDA-based operations, such as working with threads, blocks, grids, memory types, etc). CUDA allows for you to program w.r.t. C and-or C++, so many should like the idea of far less development time by doing it in a language that you are already familiar with. We have not done a real comparison of our algorithms in CUDA to a graphics-based API approach (GLSL, Cg, HLSL), but I bet you can find a fair number of comparisons on the web by now if you want to learn more about that. You can contact us at dtaxtd@mizzou.edu if you have any questions/concerns. I will not respond to basic/introductory questions or "how do I conduct my research" or "how do I write my specific application". The web is full of great GPU-related resources that can provide you guidance, but yes, you will have to work! Again, the art of GPU programming takes time and very broad and general questions about "how do I optimize my program", "how do I decompose my problem up into a format conductive for GPU programming", etc, are good questions, but most of the time, there is not an easy general answer. I wish I could build you all a list that you should follow for success, but you will have to read articles, keep up with technology, look at code, and learn the secrets to optimization. I really encourage some hero who has the TIME to sit down and compile such a long list of rules of thumb and ways to categorize types of applications and how to approach and optimize them and put it online for peer review and to help the mass of beginners (and even the experienced sometimes!). Until that day, this site will help you get on your way to learning about the world of GPGPU (general purpose GPU) programming.
GOOD BASIC GRAPHICS-API BASED GPU PROGRAMMING SITE
NEW: Good introduction to GPGPU programming by Dominik Göddeke (basic GPGPU concepts!)

CIRL GPU LESSONS USING THE CG LANGUAGE
CIRL GPU Lessons - Cg Language

CIRL GPU LESSONS USING THE GLSL LANGUAGE
CIRL GPU Lessons - GLSL Language

CIRL GPU LESSONS USING CUDA
CIRL GPU Lessons - CUDA

2006 MU CIS SEMINAR SERIES (GRAPHICS API-BASSED, I.E. NON-CUDA)
Speed-up of Algorithms With Graphics Processing Units
Presented by Robert Luke and Derek Anderson
IEEE Computational Intelligence Society MU Chapter And National Library of Medicine Medical Informatics Training Grant Special Seminar Series



These lectures were designed to teach non-GPU Computer Science and Electrical and Computer Engineering individuals about this general domain and its ability to assist with Computational Intelligence. The goal of the slides is not maximum performance and design for each of the algorithms, but understandability and a general feel for how to translate problems for typical C and C++ CPU bound programmers to Cg and GLSL for a GPU. Most of the performance details were discussed by us in person during these lectures versus embedded in the slides directly. For example, in the case of convolution with a Gaussian, we discuss how a two pass algorithm using a Gaussian 1D decomposition is much faster than the easy to code up and understand 2D conv case. We do have a slide detailing performance, but these performance details are very broad and are not specalized to families of problems in CI and image processing. If someone finds a good publication or tutorial to domain specific performance for CI and/or image processing, please let us know, we would like to link to that for others in the future. If time permits, we might try to do an update to this series in the near future w.r.t. CUDA, domain specfici performance rules of thumb, and new overview material for this fast changing field.


First Seminar

Second Seminar

Third Seminar

Fourth Seminar