This should be a must class for all CS MS
Fall 2024Overall Rating (5 / 5): ★★★★★
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (5 / 5):
Workload: 22 hours/week
Pros: 1. A lot of practical work 2. You will be forced to learn or remember something you learned 3. Useful skills for all backgrounds Cons: 1. A lot of work, so many times you focus more on the projects than on the lectures 2. Rubrics could not be too specific (debatable, read detailed review) 3. Detailed Review: I took this class because it was recommended by AOS teacher, and some classmates also recommended it, and I don't regret it, and yes, this class will consume a lot of time. As usual for this class, here are my review/ tips for the projects: 1. Prefix sum: Try to stick to the tree-based data structure. I tried to use an array-based structure, but even if it works, performance will get poor as it scales (that's why it's important to use pointers in your trees), and performance is indeed part of the rubric. I would say that once you have the tree object, the other parts are easy, and try to find how to make a simple barrier, it should not be a complicated or a sofisticated one. 2. CUDA K-means: I have seen this project many times in my career. The hard part was organizing the arrays/matrices (since it's very different when you do it in R or Python rather than in C), and the rest should be 'easy', but it takes its time. 3. GO Tree comparison: Here it is debatable, because the final part can not be done (I don't know if the coarse part was fixed or replaced) but you need an specific hardware rig to run that, so ask first if it's needed (I spent like the half of the time trying to solve it only to check ED thread and see that it will not be considered), in the go documentation you have everything you need, but in my case I got 60 for the project an 0/40 for the report, only because I did not specified the other metrics requested. I asked for a revision, but the final decision was "try to stick to whatever the rubric asks for", so it was a bit frustrating. A final tip on this is that you can do it on your local machine, WSL, or whatever you want, but the rubric says that you should run on Codio, so try to run it there before turning it in to make sure the auto-grader works (usually is a problem with go version, so it is not a big deal). 4. Rust 2PC: Honesty, the most fun one, but at the same time, gave me a huge headache. Here is the tip, as someone typed in this page, try to look at the documentation of the one-shot server, there is a 'hidden' clue that solves the 60% percent of the difficulty of the project. 5. MPI Barnes Hut: Good project, I got stucked in the math part because I did a bad division, so check the formulas carefully, and yes this problem could be solved in the same way as the CUDA one, but the problem is the type of objects accepted by MPI, it only accepts some primitive types, so random seed could help, and yes you can try to modify the code to make MPI to accept trees, bt this could take much longer. The pro here is that you can do a good report and still have a 'fair' grade, but again, try ot stick to what they ask for. Finally, the visualization library did not work (at least I did not read any post confirming that) because you need some specific updates and fixes for it to work, so not many people put effort into that. If you want to see visuals, try to save snapshots in csv files and use other libraries like plotly in JS or Python or R to generate the videos, but again this is not the main focus of the project. Finally, you can do almost everything on WSL, but CUDA can be done (in WSL as well if your machine has a graphics) or renting one in Vast.ai or other platform, it is not expensive (like $0.08/h for a good one) but the coding experience is much much better than codio and you can link VS code if you want.