CMU Course Reviews - 2nd Semester

Here are my thoughts on the courses I took or audited during my second semester at CMU. On Grading at CMU I received straight A’s again this semester. However, I’ve noticed some peculiar aspects of CMU’s grading system. Graduate students in the Carnegie Institute of Technology (College of Engineering) cannot receive A+ grades in transcript even if they scored A+ in a class not offered by CIT, capping their GPA at 4.0. Since an A+ is worth 4.33 on the GPA scale, graduate students in other colleges can offset an A- with an A+ to maintain a 4.0, whereas engineering students cannot. This policy likely stems from CIT being CMU’s oldest and original college, preserving a traditional grading system without A+ grades. ...

December 17, 2025 · 4 min · 654 words · Li Cao

Parallel Binomial Option Pricing

This project implements a high-performance parallel pricing engine for American options using the Binomial Options Pricing Model (BOPM), engineered to scale efficiently from multi-core CPUs to GPU-accelerated clusters. By leveraging OpenMP, CUDA and MPI, it addresses the algorithm’s sequential bottlenecks through a diverse set of optimization strategies. More details at: https://github.com/l1-ca0/parallel-binomial-option-pricing

December 9, 2025 · 1 min · 51 words · Li Cao

Last Day of Fall Semester

Today is the last — and coldest — day of the semester. I ended the term by giving a recitation for 10‑703 on applying reinforcement learning to diffusion models.

December 5, 2025 · 1 min · 29 words · Li Cao

Lock-free Programming is Hard

Lock-free programming has this magical aura around it. If you’ve ever heard of lock-free programming, you’ve probably seen those neat little Compare-And-Swap (CAS) loops that seem to solve everything. I found a bug in a CAS loop that had been sitting quietly in CMU’s 15-418 Parallel Computer Architecture lecture slide for years. The “Simple” Example Here’s what the example in lecture slide looked like: // atomic compare and swap int atomicCAS(int* addr, int compare, int val) { int old = *addr; *addr = (old == compare) ? val : old; return old; } // build atomic max using CAS void atomic_max(int* addr, int x) { int old = *addr; int new = max(old, x); while (atomicCAS(addr, old, new) != old) { old = *addr; new = max(old, x); } } The idea is: ...

October 11, 2025 · 6 min · 1078 words · Li Cao

CMU Course Reviews - 1st Semester

Looking back on my first semester at CMU, I wanted to share my thoughts and experiences with the courses I took. This might be helpful for future students planning their schedules. This semester I took 4 courses. The workload was intense but manageable with good time management. Here’s my breakdown: 18-613: Introduction to Computer Systems While the famous CSAPP course has been extensively reviewed and is taught at many universities, here’s my personal perspective on the CMU experience. ...

July 18, 2025 · 6 min · 1259 words · Li Cao