From cdf12861d284dfec9e045610b2c170bf0e947ddd Mon Sep 17 00:00:00 2001
From: David Preiss <davepreiss@gmail.com>
Date: Thu, 16 Feb 2023 17:00:26 +0000
Subject: [PATCH] Update week1/README.md

---
 week1/README.md | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/week1/README.md b/week1/README.md
index 73f1fc4..3d817ba 100644
--- a/week1/README.md
+++ b/week1/README.md
@@ -1,22 +1,13 @@
 # Maxwell's Demon
 
-This week I wanted to start with a "normal" approach that felt pythonic with a particle class and a bunch of for loops / if statements, but still using numpy arrays. Then rewrite it with everything possible vectorized in numpy and see the difference in solve times for each.
-
-Below is a 5000 particle simulation with 1000 time steps that took 0.18 s to solve for (and incidentally much longer to write to a .mp4 or .gif file).
+This week I wanted to start with a "normal" approach that felt pythonic with a particle class and a bunch of for loops / if statements. Then rewrite it with everything possible vectorized in numpy and see the difference in solve times for each. Below is a 5000 particle simulation with 1000 time steps that took 0.18 s to solve for (and incidentally much longer to write to a .mp4 or .gif file). There's one nice vectorization step where where you can advance each particle by adding the product of velocity and timestep, but then a lot of np.where statements to check for collisions. 
 
 ![](img/animation_fast.gif)
 
-https://gitlab.cba.mit.edu/davepreiss/nmm/-/blob/a6f0474d8cdb6bec89cc871ceecbd14fa6b71472/week1/maxwells_demon_fast.py
-
-[](maxwells_demon_fast.py)
+-[Here you can find the fast all numpy code used to make the simulation above.](https://gitlab.cba.mit.edu/davepreiss/nmm/-/blob/a6f0474d8cdb6bec89cc871ceecbd14fa6b71472/week1/maxwells_demon_fast.py)
 
-[](maxwells_demon.py)
+-[And here you can find the first slower one.](https://gitlab.cba.mit.edu/davepreiss/nmm/-/blob/558752ea110a91f466dedd88306fcb5f8abbc0e9/week1/maxwells_demon.py)
 
-Interestingly Numba resulted in a ~4.5 s solve time compared to a 0.17 s time without it. From a very helpful conversation with Erik - for low particle counts
-Erik 
-gpu has overhead to move from cpu to gpu
-gpu is good at multithreading
-optimized for throughput over latency
-might be slower on gpu for small numbers of particles
+### Numba / Jax
 
-jax and numba will both 
+Dissapointingly Jax doesn't have native support for windows, but Numba was easy to get up and running with just a single @jit(nopython=True) decorator. On first run it resulted in a 4.5 s solve time, which is more than an order of magnitude increase. After talking with Erik, it seems like JIT compilation adds a lot of time overhead to pre-compile, so you need to make sure you are at a simulation complexity (particle count or time scale) to catch up to the raw numpy. After this I didn't bother trying trying to run anything on the GPU, but will likely wind up in a place where this is necessary in later weeks.
-- 
GitLab