Fundamentals and parallel programming practices for multicore and manycore processors including general purpose multicore CPU, Graphic Processing Unit (GPU) manycore accelerator and Intel Xeon Phi manycore processor. Compiler and runtime techniques for mapping high-level parallel programming models to the three machine architectures mentioned before. Topics include: processor architecture of multicore CPU, NVIDIA GPU manycore accelerator, and Intel Xeon Phi manycore; parallel programming using OpenMP and CUDA threading models for the three types of processors; compilation and runtime techniques based on LLVM compiler; and performance optimization techniques and application study using computation kernels for imaging processing, deep learning and scientific simulations. The course include a significant portion of programming exercises to create software solutions for ongoing research problems that use CPU, GPU and Xeon Phi systems in heterogeneous systems.
Multicore CPU, NVIDIA GPU and Intel Xeon Phi manycore are the three major processor architectures used in today's parallel and high performance computing system, and OpenMP and CUDA are the top two programming models for these three architectures for computational and data science applications. This course will introduce the architectures of the three types of processors, the two programming models and how they are used for high performance computing applications. The course will then shift to the topics covering the implementation challenges in compiler and runtime systems for mapping high-level programming models to low-level hardware capabilities and features, including runtime task scheduling, memory management and data movement for using GPU accelerators, vectorization, synchronization, etc. The course will be organized as half-lecture and half-project. Course projects will be based on real research problem and will give students opportunities for hands-on development of software tools and applications for using the three architectures.
This is an advanced graduate level course. Preliminary courses and experiences of computer architecture, programming languages and compiler, system or parallel programming, data structure and operating systems, fluent programming using C and self-motivated learning attitude are essential for students’ success in this course.
Following completion of the course, students should be able to:
There will be two 75-minute lectures per week, which constitutes 100% of the course delivery. There will be no separate labs, and there are no plans for distance learning.
There will be two regular homework assignments for each student in the first part of the course, about four to five weeks. The class will then be organized into multiple groups, each of which has two or three students working on a research problem as the course project focusing one of the three architectures. Each group will be responsible for collecting materials, presenting the project topic, work on the project and creating project report. The outcome of each group includes documents and materials related to the topic, software implementation of the project, project presentation, and a project report. The work of each project will be split into three to four tasks; each has a deadline to finish. All the class will participate in the lecture, presentation and discussion of the course topics and projects. Accesses to multicore CPU, NVIDIA GPU and Intel Xeon Phi will be provided for students during the semester.
Letter | Percentage |
---|---|
A | 90-100 |
B+ | 86-90 |
B | 80-86 |
C+ | 76-80 |
C | 70-76 |
D+ | 66-70 |
D | 60-66 |
F | 0-60 |
3 | 09/04 | Monday | Labor day | ||||
---|---|---|---|---|---|---|---|
09/06 | Wednesday | 3 | OpenMP Parallel and Worksharing for TLP | OpenMP | OpenMP Programming | Assignment 1 | |
4 | 09/11 | Monday | 4 | OpenMP Tasking and Data Environment | |||
09/13 | Wednesday | 5 | OpenMP Performance Optimization and Best Practices | ||||
5 | 09/18 | Monday | 6 | OpenMP Implementation in LLVM and Intel Compiler | |||
09/20 | Wednesday | 7 | Project Brainstorming | Assignment 1 Due | |||
6 | 09/25 | Monday | 8 | Programming with PThreads | PThreads | PThreads Examples, POSIX Threads Programming from LLNL | Assignment 2, forkjoin.c, Due 10/11 |
09/27 | Wednesday | 9 | Texas Instruments TDA2x and Vision SDK/OpenVX | TI TDA2x and Vision SDK/OpenVX | |||
7 | 10/02 | Monday | 10 | Programming with PThreads Mutex and Condition Variable | |||
10/04 | Wednesday | 11 | DLP with NVIDIA Manycore GPU | GPU/CUDA Intro | CUDA examples, GPU and CUDA programming | ||
8 | 10/09 | Monday | 12 | GPU Threading and CUDA | GPU/CUDA Threading and Memory | ||
10/11 | Wednesday | 13 | GPU Threading and CUDA | Assignment #2 Due | |||
9 | 10/16 | Monday (midpoint) | 14 | GPU Memory and CUDA | Assignment #3 Due 11/03 | ||
10/18 | Wednesday (Fall break on Thursday/Friday) | 15 | GPU Memory and CUDA | GPU/CUDA Streaming, Library and Tuning | |||
10 | 10/23 | Monday | 16 | GPU (OpenMP and OpenACC) | OpenMP/OpenACC for offloading | ||
10/25 | Wednesday | 17 | |||||
11 | 10/30 | Monday | 18 | ||||
11/01 | Wednesday | 19 | |||||
12 | 11/06 | Monday | 20 | ||||
11/08 | Wednesday | 21 | |||||
13 (SC17) | 11/13 | Monday | 22 | ||||
11/15 | Wednesday | 23 | |||||
14 | 11/20 | Monday | 24 | ||||
11/22 | Wednesday | Thanksgiving Holiday | |||||
15 | 11/27 | Monday | 25 | ||||
11/29 | Wednesday | 26 | |||||
16 | 12/04 | Monday | 27 | Project Presentation | |||
12/06 | Wednesday (Last class) | 28 | |||||
17 | 12/11 | Monday | |||||
12/15 | Friday | Project Report Due | |||||
18 | 12/18 | Monday | Last exam day (12/11 - 12/18) |
The homework and project exercises are chiefly for your own benefit. You may collaborate and consult outside sources freely when doing the homework, but you must tell me who you are collaborating with. Please remember, however, that the best way to master the material is to try the exercises on your own, then submit your own work to get feedback on it. (You will get credit even if you do not solve the problem, as long as you make an honest effort.)
Each assignment has a due date and a cutoff date. Assignment due 11:55PM on the date, cut-off date is 48 hours after the due date/time. You have a total of 7 "slip days" throughout the semester that you can use at your discretion to turn in programming assignments past the posted due date. Slip days are used in whole day increments. Once your slip days are consumed, late programming assignments will be penalized at 10% per day. Assignment submission will not be accepted after the cutoff date.
Reading and lectures: The students are expected to read all assigned material before the lecture begins and review the material after the lecture.
There is no required attendance policy, but if for some reason you cannot attend class, you are responsible for any material covered during your absence. Late arrivals must enter the classroom quietly and discreetly.
Exam and tests, if there are, are given in class and are open-book/open-notes. You may use any printed materials you wish during the test, but you may not use electronic devices except for use as timepieces or legitimate use by disabled students with prior notice. No make-up exams will be given except under extreme circumstances (such as severe illness or death in the immediate family) in which case you must give me notice well before the exam if at all possible.
Examination work is expected to be the sole effort of the student submitting the work. If a student collaborates with anyone on the homework (whether or not a student), all collaborators must be listed at the top of the first page. Students are expected to follow the Code of Student Academic Responsibility. Every instance of a suspected violation will be reported. Students found guilty of violations of the Code will receive the grade of F for the course in addition to whatever disciplinary sanctions are applied by the University.
Students are expected to be aware of the university policy on use of computing resources, including the Student Guidelines for Responsible Computing, as well as the college and departmental policies on proper use of computing resources. Every instance of a suspected violation will be reported.
Any student with a documented disability should contact the Office of Student Disability Services at 803-777-6142 to make arrangements for appropriate accommodations.