Parallel Computing

← All courses

A new course on high-performance computing in Julia, aimed at third-year ENSAI students who are comfortable in Python but new to Julia. The guiding idea: speed doesn’t come from a “magic” language but from understanding what the machine actually does — cost per operation, data movement, and sharing. Python is the familiar point of comparison; Julia is the test bench.

In preparation

This course is being developed and has not been taught yet. The materials linked below are early drafts and will evolve.

A single red thread runs through the course — estimating π by Monte-Carlo — carried from a plain sequential loop, to multithreading, to the GPU.

Modules

🧩 1 · Compilation & Types How Julia specialises code on types — why a pure Python loop takes ~1 s where Julia runs in milliseconds. Tools: @code_warntype, @btime; Python bytecode via dis.
🔀 2 · Multiple Dispatch vs OOP Julia's multiple dispatch as a language idea, contrasted with Python's OOP / singledispatch. A language module — no parallelism yet.
🧵 3 · Threads & Concurrency @threads, race conditions, and Python's GIL (threads vs processes). Monte-Carlo π, multithreaded.
4 · Memory & GPU The memory hierarchy and locality, batching, and the GPU (CUDA; PyTorch CPU vs CUDA). Estimating π on the GPU.

Approach

Each module pairs a common Python track (zero-install, in Jupyter/Colab — so nobody falls behind) with an optional Julia deep-dive (@btime, @threads, the GPU). The teaching engine is comparing the numbers between the two: a Python loop at ~1 s next to a Julia loop in milliseconds makes the cost of abstraction concrete. Slides frame each session; the Pluto notebooks are live, executable demos.

Materials