Overall Rating (5 / 5): ★★★★★
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (4.3 / 5):
Workload: 30 hours/week
Pros:
1. Great parallelism experience with several languages and environments
2. Grade is project based so no exams/midterms
3. Projects cover a variety of applications and TAs were very helpful and responsive
Cons:
1. Heavy workload 20+hr/week if you are an expert programmer 30+hr/week if you don't code for a living in systems languages
2. Verifying your code can be a challenge - getting support in Ed and especially discord can be a game changer with additional test cases.
3. This is a class where the lectures cover 30% of what you need and you need to figure out the other 70%
Detailed Review:
In this class you cover various aspects of parallelism... on CPU (pThreads) on GPU (CUDA) and across systems (MPI), on a variety of languages such as C/C++/Go/Rust with pThreads and MPI. As a non-CS major / non software development background, this can be a heavy class, but doable if you stay on top of it. The times I have spent on each project:
Lab 1: 42 hours Prefix Sum: C/C++ with pThreads
Lab 2: 140 hours Parallel K-means with CUDA and Thrust
Lab 3: 52 hours Parallel BST Comparison with Go
Lab 4: 78 hours Parallel Two phase commit in Rust
Lab 5: 105 hours n-Body simulation with Barnes Hut using C/MPI
This is across 15 week period with each project deadline every 3 weeks or so. I don't recommend taking this with anything else other than maybe CSML unless you already have a strong C/C++/Rust background. Some of the projects had starter code you had to go through to understand... some you start from scratch... each with challenges of their own. When it comes to setup, you'll need a system with nVidia GPU to do the CUDA lab or use Codio (online platform they provide). Setting environments can be a pain, but makes for easier debugging. Just using Codio is much simpler to get started, but development and debugging is much harder (at least for me it was).
100% recommend taking this class.
Overall Rating (5 / 5): ★★★★★
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (3.6 / 5):
Workload: 12 hours/week
Pros:
1.
2.
3.
Cons:
1.
2.
3.
Detailed Review:
Loved this course. Fast paced, but doable with a background in ML. Many different papers/techniques are touched on, and this course provides a solid foundation for more advanced ML research.
Overall Rating (5 / 5): ★★★★★
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (2.1 / 5): ★★☆☆☆
Difficulty (5 / 5):
Workload: 31 hours/week
Pros:
1. Learn a lot of concurrency/parallel programming patterns
2. Learn Go and Rust
3. Learn how to generate reports for labs
4. Learn performance measuring
Cons:
1. Scattered knowledge points
2. A lot of programming work
3. Hard to get some help from office hours, because when you asking questions, you don't know what to ask.
4. Taking some time to understand the concepts
5. The labs requirements sometimes are vague
Detailed Review:
Only five labs, no exams.
Lab 1: Prefix sums(C++)
Prefix sums: Prefix sums, or cumulative sums, are a technique to preprocess an array so that the sum of any subarray can be calculated quickly in constant time.
Prefix sums have many applications
Pthread barrier: A pthread barrier is a synchronization mechanism that ensures all participating threads in a multithreaded program reach a specific point in the code before any of them can proceed.
Work-efficient prefix sum algorithm(Blelloch)
Lab #2: KMeans with CUDA(C)
* GPU/CUDA parallel API
* Low-level api, calculate the indexes
* High level api
* KMeans algorithm
Lab #3: Binary Search Tree with Golang
The goal of this assignment is to write a program in a language that restricts the programming model to simplify dealing with concurrency: Google's Go. You will use channels, go-routines, and signaling to compute binary search tree equivalence.
* Golang concurrency pattern(be careful, a bit tricky)
* BST data structure
Lab 4: Two-Phase-Commit(Rust)
* Rust language: no garbage collector, ownership, memory safe at compile time, high-performance(close to C++)
* Two phase commit protocol for distributed systems
* Hard to debug due to using one process to control multiple children processes
Lab #5: MPI Barnes-hut
* MPI: parallel computing pattern
* Barnes-hut algorithm
* OpenGL: for visualization
Overall Rating (5 / 5): ★★★★★
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (2.9 / 5):
Workload: 5 hours/week
Pros:
1. Python programming for all assignments. Python familiar peeps would have absolutely no problem
2. Lecturer and TAs are very responsive on Piazza and gradescope in convenient to use
3. Materials such as lecture notes are quite good but you do have to read up some things on your own
Cons:
1. One of the assignments needs Java and no installation instructions were provided
2. Libraries used for each assignment are not in the assignment question
3. Some assignments are hyperparameter tuning heavy
Detailed Review:
If you have decent math, stats, and Python background, this class can be enjoyable. Else, you'd find yourself spending time looking up the fundamentals.
Overall Rating (5 / 5): ★★★★★
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.9 / 5):
Workload: 15 hours/week
Liked this course very much. Assignments are laid out well. I like the feature of auto-grading. Sceleton codes are very helpful. Downside would be there are some knowledge appears in the assignments were not mentioned in the lectures and TA were not very helpful instructing. I ended up having to google a lot.
Overall Rating (5 / 5): ★★★★★
Professor Rating (5 / 5): ★★★★★
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 16 hours/week
This was a challenging but ultimately very rewarding course. The professor does a great job of explaining complex topics as well as providing organized lecture notes, and the TAs are very supportive on Piazza. The workload is significant, but not impossible. Be prepared to dedicate a good amount of time each week, but what you learn is directly applicable to real-world problems.
Pros:
1) Practical Homework: The homework are the best part of the course. You're not just working on theoretical problems; you're building and training models in a way that feels directly applicable to scenarios you'd encounter in a data science job. This hands-on experience is invaluable.
2) Helpful Structure: The weekly quizzes are fairly straightforward, which helps balance the overall workload. The real challenge comes from the four main homework assignments, which are much more in-depth and where the most significant learning occurs.
3) Excellent Office Hours: Going to office hours is highly recommended, especially for the homework assignments. The TAs are fantastic at walking you through roadblocks. If you make an effort to go, you can often get ahead on the work and finish assignments early.
Cons:
1) Heavy Workload: While the work is beneficial, 16 hours a week is a serious commitment. It can be tough to manage alongside other demanding courses, so you need to be diligent with your time management from day one. However, if you already have background as a coder and in ML, then you may not need 16 hours...
2) Theoretical Complexity: While the lectures are very good, some of the underlying mathematical concepts are dense. You may need to do some extra reading or review on your own to fully grasp the theory behind some of the more advanced models.
Overall Verdict: Highly recommend this course if you're serious about deep learning. The practical skills you gain are worth the effort. Just be ready for the time commitment and make sure to take advantage of office hours.
"It is new, indeed, for I made it last night in a dream of strange cities; and dreams are older than brooding Tyre, or the contemplative Sphinx, or garden-girdled Babylon."
Fall 2023CS 389L · Automated Logical Reasoning
Overall Rating (5 / 5): ★★★★★
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (5 / 5):
Workload: 25 hours/week
Pros:
1. Extremely well taught
2. Extremely interesting and valuable subject
3. Surviving it will make you invincible as an AI specialist
Cons:
1. We live on a placid island of ignorance in the midst of black seas of infinity, and it was not meant that we should voyage far
2. I have looked upon all the universe has to hold of horror, and even the skies of spring and flowers of summer must ever afterward be poison to me
3. The Thing cannot be described - there is no language for such abysms of shrieking and immemorial lunacy, such eldritch contradictions of all matter, force, and cosmic order. A mountain walked or stumbled.
Detailed Review:
ALR is a wonderful and frightening course. It is a perfect online course in terms of the attention and effort and love put into it, on a subject that is not very easy to teach. A subject that is basically the dark side of the moon of AI. Or Eldritch horrors infinitely older than the universe itself given how the field had its equivalent of an AlexNet moment over 120 years ago
You will be inclined to underestimate it when you start the first week off with first order logic refreshers and the phrase "multiple choice quiz". Make no mistake though, you will need to be very elaborate with these. So grab a pencil and some paper, convert each and every one of the multiple choice answers into logical symbols and then process them just like the formal verification systems you are studying. Without exception
Sure, you might have a few years of test taking experience and some corresponding instincts to make educated guesses when facing multiple choice tests. But this professor was trained in test-taking like a Shaolin monk. She was filling Scantrons before she could walk. All puny corner cutting tricks you can possibly come up with are accounted for. Any disrespectful instance of not paying attention is swiftly punished as a wrong answer. Think of that puzzle cube in Hellraiser, that's the quiz format. And Professor Dillig is the Leviathan
Do you think I am exaggerating? No, I am downplaying it if anything. She survived the Battle Royale that is the Turkish K-12 system that required her test scores to be in the top 99.9th percentile, that is top 1500 out of 1.5 million 8th graders yes, to get into the high school she attended. As if that is not enough, she then went on to get accepted into Stanford
Those quizzes are written by the Zorro of test-taking, and you are a little baby who can barely use a fork
Oh and if you have anything resembling dyslexia or some attention deficit disorder or sleep deprivation or undiagnosed hypermetropy, lol. Lmao even.
Overall Rating (5 / 5): ★★★★★
Professor Rating (5 / 5): ★★★★★
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (5 / 5):
Workload: 40 hours/week
Pros:
1. No quiz, only lab
2. small class
3. System level material, you will have confident working with parallelism using thread and process in the end
4. There are lecture slides?
Cons:
1. programming intensive, prepare for your life to work on the assignments while crying 😢
2. crying 😢intensive programming, for your the assignments while prepare work life to on
3. Parallelism is a really difficult subject to tackle.
4. This course is entirely practical, lectures won't help you anywhere. Work ahead if you can.
Detailed Review:
Average assignment: 30 hours
Average crying: 10 hours
Average crying second round: 10 hours
Recommendation:
- Learn C++
- Get a Nvidia machine to learn CUDA
- Learn Go
- Learn Rust
- Learn Physics ( Don't watch interstellar, watch TENET)
- Learn MPI
Overall Rating (4.6 / 5): ★★★★★
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (4.3 / 5):
Workload: 15 hours/week
Pros:
1. Homework projects are all game-related and very interesting
2. A huge TA/supporting team of 6-8. TA office hour almost everyday
3. Lectures are well explained
Cons:
1. No slides are given for the lectures
2. Sometimes not very clear definitions of inputs/outputs for the coding projects
3. A bit tedious into details, for some of the trees
Detailed Review:
Overall, I have mixed feelings about this course, but I like it the most out of the four courses I have taken so far in MSDS. There are pros and cons in many aspects of the course. Nevertheless I feel that I learn a great deal out of it.
On the positive side, the homework projects are all game-related, which makes them very interesting. Additionally, the course has a large TA/supporting team of 6-8 members who are always available to answer questions and provide assistance. Furthermore, the lectures are well-explained by a knowledgeable professor who uses examples to explain concepts and summarizes key points for each session.
However, there are some negative aspects to the course. Firstly, no slides are given for the lectures, and the professor uses chalk and board, which slows down the pace. If you need to look up something later, you have to watch part of the lecture video again. Secondly, some of the coding projects have unclear definitions of inputs/outputs, which can be a distraction from the main purpose of the course. Students sometimes need to ask questions on Piazza but do not receive clear clarifications. Finally, some of the trees can be a bit tedious to work with.
The homework projects are a lot of fun because they involve building games with Python. The starter code and test cases provided are really helpful in verifying if my code is on the right track. However, some issues with the homework include the lack of clear definition about input/output, which can be frustrating. Moreover, Python iterators are used in some projects, but they are not taught in the lecture.
Fortunately, we have a great TA team of more than 6 members who are always available to help with questions and code issues. Nonetheless, some of the quiz questions can be tricky.
I have a background in physics and do not actually do coding at all in my work. I took the U of Michigan "Python for everybody", and part of the Stanford's "Divide and Conquer, Sorting and Searching, and Randomized Algorithms" course, both on Coursera, before taking this course. With those preparation, I feel the level of difficulty of this course is manageable for me.
From spring 2022 to fall 2022 (the semester I took this course), they made quite some changes to the course. I hope they can make this course even better for future students.
Grades cutoffs for my semester (I would say it was very generous)
A > 84%
A- > 76%
B+ > 72%
B > 64%
B- > 58%
C+ > 47%
C > 0%
Overall Rating (4.6 / 5): ★★★★★
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (3.6 / 5):
Workload: 8 hours/week
Pros:
1. Fun homeworks
2. Helpful TAs
3. The textbook is actually fun
Cons:
1. Easy to get lost in the C sauce
Detailed Review:
I really enjoyed the class and the group projects - I think it was very manageable and clear and interesting. I wish that we could have a little more explanation of the basics of XV6 (the sandbox OS for the class) before getting started, since it can be really confusing to have to dig for things all over the file directory.