Parallel Computing
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.
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
end keyword, broadcasting with the dot, functions and structs, Unicode math. The onboarding before module 1 — no performance, no parallelism yet.
@code_warntype, @btime; Python bytecode via dis.
singledispatch. A language module — no parallelism yet.
@async/@sync to overlap I/O (fetching live market data on one core), then real multithreading with Threads.@spawn: Markov chains and a parallel Monte-Carlo π — including the race condition that silently corrupts a shared counter.
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.@spawn, 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
The common track — zero install, runs in Colab. Every module’s benchmarks, in the language you already know.
Live, executable Julia demos — the reference solutions.
The same lessons as plain .jl files with #%% cells — for the VS Code Julia extension or the REPL, if you prefer that to Pluto.