Course Syllabus

Overview

This course aims to provide knowledge and hands-on experience in developing software for processors with parallel computing resources. A parallel processor has the hardware ability to allow many threads to execute simultaneously. Many commercial offerings from Qualcomm, Intel, AMD, NVidia, Google, Apple, and ARM offer such levels of concurrency. Effectively programming these processors requires in-depth knowledge of parallel programming principles, including parallelism models, communication models, and resource limitations. In addition, this course teaches students how to parallel programming in modern programming languages. The target audiences of the course are students who want to develop parallel applications for work, research, or fun and develop programming tools and architectures for parallel processors. 

The course involves a series of steadily increasing complexity programming assignments. All assignments include programming a parallel system using OpenCL, a popular open-source C/C++ like language for parallel programming.

Reference Textbooks

David R. Kaeli, Perhaad Mistry, Dana Schaa, and Dong Ping Zhang. Heterogeneous computing with OpenCL 2.0. Morgan Kaufmann, 2015. (available online at UCSD Library)

Matthew Scarpino. OpenCL in action: how to accelerate graphics and computations. Simon and Schuster, 2011. 

Aaftab Munshi, Benedict Gaster, Timothy G. Mattson, and Dan Ginsburg. OpenCL programming guide. Pearson Education, 2011.

OpenCL Documentation

OpenCL Guide
OpenCL Specification
OpenCL C Specification
OpenCL Reference Pages
OpenCL Reference Guide
OpenCL Error Codes
Syntax Comparison Table for Different Compute APIs

Discussion Board

We will use Discord for announcements, questions, and general class discussions. Please post all non-personal questions there.

Lecture Materials

Lecture materials will be posted before class.

Class Schedule

The class schedule is subject to change.

Late Submission Policy

Everyone in this class starts with three "late days" to use throughout the quarter for their programming assignments. A late day must be used in increments of one day. One can use multiple days on a single assignment. To make this clear through examples:

  • You can turn in one project up to 24 hours late (using one late day) and use the other late days on different projects
  • You can turn in one project three days late, and you must turn in all other projects on time.

You do not need to tell us if you use a late day.

If you have used up your late days and turned in a project late, you will get partial credit on that assignment. The penalty is 10% per day, i.e., turn it in less than one day late, and the best you can get is 90% on the assignment. 

We will automatically deduct your late days before applying partial credit. You cannot choose to save your late days and opt for partial credit. 

The programming assignments are typically closed 5-7 days after the due date. No credit is given for submission after the assignment has been closed.

If you fail to turn in an assignment, you will be given 0% for that assignment, and no late days will be deducted.

Grade Breakdown

  • Exams: 50%
    • Exam #1: 25% - Week 6
    • Exam #2: 25% - Finals Week
  • Programming Assignments: 40%
    • Passing Test Data Sets, meeting performance goals
    • Answering questions
  • One-minute Quizzes: 10%
    • One-question quiz on Webclicker at the start of most classes
    • 10 points for a correct answer; 5 points for an incorrect answer; 0 points for not participating in person
    • 100 points required for full 10% credit over the quarter; 100 points is the maximum (no extra credit)

Academic Honesty

You are allowed and encouraged to discuss programming assignments with other students. 

However, copying of non-trivial code is unacceptable. "Non-trivial" should be considered as more than a line of code. Examples of copying include:

  • Reading someone else's code and then writing your own
  • Using assignments from online as a reference
  • Using previous years' solutions or code from past students as a reference
  • Asking generative AI to create a solution for you 

Those who allow copying are also at fault and subject to punishment.

All of the work that you submit must be your work. A good litmus test is that an instructor can point to anything that you submit, and you must be able to explain it fully.

Potential penalties for academic dishonesty include:

  • Zero on the assignment
  • Automatic failure of the course

All offenses, no matter how small, are reported to the university. 

Generative AI Course Policy

Conditional Use Template

Generative artificial intelligence (GenAI) tools that produce text, images, music, or code, like ChatGPT, Claude, SnapChat AI, Bing Chat, Google Gemini, DALL-E, GitHub CoPilot, and Grammarly that generate output may be used in this course in limited ways with proper documentation, citation, and acknowledgement. 

In accordance with our course learning outcomes, you may use the following GenAI tools in the following ways:

  • Help understand the starter code given to you as part of the programming assignments
  • Research techniques for optimizing code
  • Developing insights into class concepts and ideas

As a way to demonstrate your honest use of these tools and your learning process, you must:

  1. Keep a history of your chats and submit them when requested (NOTE: not all tools allow you to retain your chat history. If you choose to use a tool, use one that does retain).
  2. If you use generative AI tools on any class assessment, you must properly document and credit the tools themselves. You must cite the tool you used. Cite the content that came from the GenAI tool using citation methods endorsed by the UC San Diego Library.  Additionally, you must include a brief description of how you used the tool. You should document the use of the generative AI tool in your code as comments. 
  3. Reflect on the process of using the GenAI tool by considering these questions:
    • Did I submit code that was generated by GenAI? This is not allowed.
    • Do I understand the output provided by GenAI? Note that GenAI may not always give factual or correct answers.
    • Did I use GenAI to query direct responses for programming assignment questions? This is not allowed.
    • Am I completely comfortable with disclosing to the teaching staff exactly how I used GenAI and showing them all of my prompts?

NOTE: GenAI is known to fabricate sources and facts and to give false information. It also perpetuates bias. You should also be aware that there are copyright and privacy concerns with these tools. You should exercise caution when using large portions of content from AI sources for these reasons. Also, you are accountable for the content and accuracy of all work you submit in this course, including any supported by generative AI. It is your responsibility—not the tool’s—to assure the quality, integrity, and accuracy of work you submit in any course.

The teaching staff reserves the right to follow up with you to assess your process for completing the assessment and your understanding of the content. If you have not sufficiently supported your work, this matter will be reported to the Academic Integrity Office.

If you need help on your assignments or in the course, please reach out to the teaching staff for support, or reach out to any of the following UC San Diego academic support centers for academic assistance:

The Library for research-based assignments

Accomodations

Students requesting accommodations for this course due to a disability must provide a current Authorization for Accommodation (AFA) letter (paper or electronic) issued by the Office for Students with Disabilities. Students are required to discuss accommodation arrangements with instructors and OSD liaisons in the department IN ADVANCE of any exams or assignments.

Course Summary:

Course Summary
Date Details Due