CSCI4160 Parallel and Distributed Computing - CUHK Course Review

Term Taken: 2021 Spring

Remote Teaching due to COVID19

Instructor: Prof. Eric Chi Li Lo

Grading Scheme

  • OpenMP/pthread + SIMD programming (10%)
  • CUDA programming (10%)
  • OpenMPI programming (10%)
  • Raft Implementation (30%)
  • Final Exam (40%)

Topics Covered

  • Time Order, Broadcast, Mutex
  • Leader Election, Fault, Consensus
  • Paxos, Raft
  • CAP Theorem, Replicated State Machine
  • Consistency Models
  • Transaction
  • P2P, Blockchain
  • OpenMP, pthread
  • Software Hardware Co-design
  • General-Purposed GPU, CUDA
  • Performance Analysis
  • MPI
  • Lock-free programming


This was surely one of the top 5 most enjoyable CS courses I took at CUHK. It systematically taught us some important systems-related topics. If you enjoyed Operating Systems (CSCI3150), Database (CSCI3170), and Cloud Computing (CSCI4180), this course is for you. It gave a good review and deeper dive on the previous three courses while connecting them so we could see the big picture.

Although the lectures were more theoretical, the homework offered quality hands-on programming exercises. In the parallel programming part, we had to solve the “maxima of a point set” problem three times, using OpenMP/pthread and SIMD for the first time, CUDA for the second time, and OpenMPI for the third time. This assignment was quite challenging since we only got 60% score if our program was fully correct, the 40% was calculated by the running speed of the program. We had to beat the running time of TA’s solution to obtain full marks.

As for the distributed programming homework, we had to implement the Raft consensus algorithm using either Java or Go. Most of the students used Go because it’s got some nice multi-threaded primitives such as goroutines and channels. This homework was a great challenge for most of the students because we had to read and fully understand the Raft paper before heading into actual programming. Furthermore, since many students weren’t familiar with Go, it made the matter more complex. However, completing the homework was extremely rewarding, as I not only gained hands-on experience in programming something non-trivial using the popular Go language but also comprehended the elegance of a distributed consensus algorithm.

I really enjoyed the teaching style as well. Prof. Eric taught complex subjects step-by-step, and made it easy for us to absorb. He also made sure every student was on the same page by checking the backgrounds of all students from time to time. For example, if there were students who didn’t take Database (CSCI3170) before, he would go over some essential concepts of Database before moving on to the actual subject.

Overall, this was one of the most challenging undergraduate course CUHK offered, but the amount of knowledge one could gain from it was totally worth it.

P.S. This is the last course review on this blog since I’m graduating this semester. See y’all.

More CUHK Course Reviews