University of Minnesota
Institute of Technology
myU OneStop


Electrical and Computer Engineering

Introduction to CUDA programming for GPGPU computing (3-day course)

Dr. Weijun Xiao
Electrical and Computer Engineering

Duration: 3 days (21 hours)

Course Description:
The rapid development of Graphic Processing Units (GPUs) brings new opportunities for high performance computing. Due to the low cost and parallel computing capability of GPUs, GPU computing has recently been used for a wide range of high-performance computing applications. Benefiting from GPU hardware, applications can often achieve more than 100 times performance speedup for signal processing, physical simulations, biomedical imaging, geologic computation, and other fields. The primary objective of this short course is to provide students with knowledge and hands-on experience in developing application software for GPUs. The course will concentrate on parallel programming basics, GPU hardware architecture and software, CUDA architecture, CUDA programming & debugging techniques.

1.    Introduction
    GPU computing and architecture
    Parallel programming basics
2.    CUDA programming
    CUDA program model
    A simple CUDA program
3.    CUDA programming techniques
    Shared memory
4.    CUDA streams & multiple GPUs
    CUDA streams
    Multiple GPUs
5.    Integrating CUDA C with MFC and OpenGL
    CUDA C with MFC
    CUDA C with OpenGL
6.    CUDA debugging techniques
    CUDA program debugging
    CUDA performance profiling

Intended audience and assumed background:
This short course is intended for software designers and application developers who need to understand how to achieve high performance by using GPUs for general-purpose computing, and who need to learn CUDA programming & debugging techniques. People from various disciplines with a strong need for solving computing-intensive problems are encouraged to attend this course. It is assumed that the audience has a basic understanding of a computer system and entry-level C/C++ programming experience at the level of an undergraduate in an engineering or scientific discipline. For example, it is expected to know how pipelining works and how to write a simple C/C++ program.

Biographical sketch of the instructor:
Weijun Xiao received his Ph.D. in Electrical and Computer Engineering from the University of Rhode Island, and both M.S. and B.S. degrees in Computer Science from Huazhong University of Science and Technology, China. He is currently a Research Associate of the Department of Electrical and Computer Engineering at the University of Minnesota-Twin Cities. He has been named a 2009 Computing Innovation Fellow (CIFellow), a postdoctoral fellowship program developed by the Computing Community Consortium (CCC) and the Computing Research Association (CRA), with funding from the National Science Foundation. Dr. Xiao's primary expertise is in data storage, high-performance computing, and computer architecture. He has published research papers at top journals and conferences in these areas such as IEEE TPDS, ISCA, and ICDCS.