CS364 - Concurrent and Distributed Programming

Tuesday/Thursday 8:00am-9:15am, Streibel Hall Room 115

This course focuses on concurrent object oriented programming and modern concurrent, distributed and parallel programming models (such as OpenMP, CUDA and Actors, Processes/Channels). Students will utilize various high performance distributed computing technology. Topics covered will include shared and distributed memory systems, sockets, threads, and message passing.

News


Contact Information


Email

tdesell@cs.und.edu

Office Hours

Streibel Hall 220
To Be Decided
Or by appointment.

Phone

701-777-3477
Email is the best and most reliable way to contact me.

Address

Department of Computer Science
University of North Dakota
Streibel Hall Room 220
3950 Campus Road Stop 9015
Grand Forks, North Dakota 52802-9015
Date Topic Lecture Notes/Lab Files Reading
01/12/2016 No Class - Travel
01/14/2016 Course Introduction
01/19/2016 Parallel Hardware
Chapters 1-2 (Pacheco)
Parallel Hardware [pdf}
01/21/2016 Lab
01/26/2016 P-Threads, Mutexes, Semaphores PThreads [pdf]
pthread_hello.cxx
01/28/2016 Lab
02/02/2016 TBA - Travel
02/04/2016 TBA - Travel
02/09/2016 Condition Variables, Read-Write Locks, Concurrent Data Structures PThreads [pdf]
02/11/2016 Lab
02/16/2016 GPU Computing with CUDA - Part 1 (Basics) CUDA 1 [pdf]
vector_sum.readme
vector_sum_gpu.cu
vector_sum_gpu_v2.cu
vector_sum_gpu_v3.cu
02/18/2016 Lab
02/23/2016 GPU Computing with CUDA - Part 2 (Grids, Blocks, Warps, Threads) CUDA 2 2 [pdf]
02/25/2016 Lab
03/01/2016 GPU Computing with CUDA - Part 3 (Synchronization) CUDA 3 [pdf]
03/03/2016 Lab
03/08/2016 Test 1 Review
03/10/2016 Test 1
03/15/2016 No Class - Spring Break
03/17/2016 No Class - Spring Break
03/22/2016 Java Threads and Synchronization Java Threads [pdf]
03/24/2016 Lab
03/29/2016 Java High Level Concurrency Objects and Sockets Java High Level Concurrency and Sockets [pdf]
03/31/2016 Lab
04/05/2016 Java URLs and URL Connections Java URLs and URL Connections [pdf]
04/07/2016 Lab
04/12/2016 Java Object Serialization Java Object Serialization [pdf]
04/14/2016 Lab
04/19/2016 Using Actors for Distributed Programming - Part 1 Actors in Java [pdf]
04/21/2016 Lab
04/26/2016 Using Actors for Distributed Programming - Part 2
04/28/2016 Lab
05/03/2016 Test 2 Review
05/05/2016 Test 2

Course Description


This course focuses on concurrent object oriented programming and modern concurrent, distributed and parallel programming models (such as OpenMP, CUDA and Actors, Processes/Channels). Students will utilize various high performance distributed computing technology. Topics covered will include shared and distributed memory systems, sockets, threads, and message passing.


Objectives


At the completion of this course, students should be proficient in multiple types of concurrent and distributed programming, including GPU computing, threads, sockets, processes/channels, and actors. Main objectives include:

  1. Introduce threaded programming in C/C++ and Java.
  2. Introduce GPU computing with CUDA.
  3. Introduce the Go programming language and using processes/channels for concurrent and distributed programming.
  4. Introduce the SALSA programming language and using the actor model for concurrent and distributed programming.

Outcomes


Students will gain knowledge/understanding of the following:

    Threads. Concurrent Programming. General Purpose Graphical Processing Unit (GPGPU) Software Design. Sockets for Distributed Computing. Asynchronous vs Synchronous Communication. Processes and Channels. The Actor Model and Message Passing.
Students will acquire the ability to do the following:
  1. Concurrent Programming with Threads and OpenMP.
  2. Develop applications in the Go Programming Language using Processes and Channels.
  3. Develop applications to run on GPUs using CUDA.
  4. Use sockets for distributed computing.
  5. Use the actor model for concurrent and distributed programming.

Pre-Requisites


  1. CSci 242 - Algorithms and Data Structures.
  2. CSci 230 - Systems Programming.


Text


The following texts are suggested for this course:

  • Programming Massively Parallel Processors, David B. Kirk and Wen-mei W. Hwu.


Grading


The course grade will consist of a series of programming assignments and two tests. The grade will be calculated as follows:

  1. 70% - Programming Assignments
  2. 10% - Test 1
  3. 10% - Test 2
  4. 10% - In Class Participation

There will be the following grade distribution:

  • [90 - 100]: A
  • [80 - 89.9999...]: B
  • [70 - 79.9999...]: C
  • [65 - 69.9999...]: D


Academic Integrity


The development of the individual problem solving skills needed for computer programming is one of the major objectives of this course. Students are to work independently of each other in completing the programming assignments. Any exception to this rule will require documentation signed by me allowing the collaborative work.

If you need help, you are welcome to consult with your instructor, your teaching assistant, or the staff of the department's Instructional Help Desk in 109A Streibel Hall. A submission of source code that you did not develop or homework assignments that was not your individual writing will be treated as plagiarism. These assignments will receive zero points and you may be referred to the Associate Dean of Student Life as a case of Scholastic Dishonesty.


Attendance


Class attendance and lab attendance are required. Any student missing more than 6 classes without a doctors excuse will fail the course. The classroom is the primary venue for course material, announcements, and other information relevant to the course. An on-line course management system may be used to make some information available to students, but this is intended to enhance, not replace, classroom interaction.


Homework and Lab Submission


Code for homeworks and labs must be commented and properly formatted (see different coding styles, I prefer 1TBS) or points will be taken away. The final homework submission must be submitted through Moodle. Each homework will list its grading criteria.

Late assignments will have their grades penalized by 15% the first day, and 30% the second day. No assignments will be accepted more than two days late. Homeworks are to be done individually (see Academic Integrity) and may involve a significant amount of programming, so start them early.


Lab Policies


All lab assignments must be completed by the end of the lab session. Any exception will require proper excuse with permission granted before the end of the lab session. Partial credit may be given to incomplete work.

Any issues related to the machines in the computer labs can be sent to cslabs@cs.und.edu.


Students with Disabilities


Upon request, the Computer Science Department will provide reasonable accommodations for students with disabilities as specified in the policies of the UND office of Disability Services for Students (DSS). You must contact your instructor to request and arrange accommodations.