diff --git a/lectures/memory-hierarchies/slides.qmd b/lectures/memory-hierarchies/slides.qmd
index d17ec15728115d7134f760b248b957eec51435c5..d269835fe6710085876f9eb7da5eb939de642617 100644
--- a/lectures/memory-hierarchies/slides.qmd
+++ b/lectures/memory-hierarchies/slides.qmd
@@ -192,6 +192,50 @@ $^*$: Lower than one due to caching effects
 
 
 
+## Memory access patterns
+
+Execution speed depends on data layout in memory
+
+```{.fortranfree}
+program loop_exchange
+   implicit none
+   integer, parameter :: nel = 20000
+   ! Note: Stay below 46000 to prevent overflows below
+   integer, dimension(nel, nel) :: mat
+   integer :: i, j
+
+   do i = 1, nel
+      do j = 1, nel
+         mat(j, i) = (i-1)*nel + j-1
+      end do
+   end do
+end program loop_exchange
+```
+
+Loop order with optimal access of elements (contiguous memory).
+
+
+
+## Hands-On {.handson}
+
+1. Compile the Fortran code from the previous slide (also [here](static/loops.f90))
+   on Levante or your PC. On Levante load the `gcc` module first (`module load gcc`).
+   Then measure the time needed to run the program, i.e.
+
+```{.Bash}
+gfortran loops.f90 -o loops
+time ./loops
+```
+
+2. Exchange the loop variables `i` and `j` in line 8 and 9 and compile again.
+   How does it impact the run time?
+
+3. Try different values for `nel` (for the original loop order and the exchanged one).
+   How does the matrix size relate to the effect of exchanged loops?
+
+
+
+
 # Memory Models
 
  - Study effect of latencies, cache sizes, block sizes, ...
diff --git a/lectures/memory-hierarchies/static/loops.f90 b/lectures/memory-hierarchies/static/loops.f90
new file mode 100644
index 0000000000000000000000000000000000000000..5b0fbf16efe75d235d3d5d8e1b95ee08253302cb
--- /dev/null
+++ b/lectures/memory-hierarchies/static/loops.f90
@@ -0,0 +1,13 @@
+program loop_exchange
+   implicit none
+   integer, parameter :: nel = 20000
+   ! Note: Stay below 46000 to prevent overflows below
+   integer, dimension(nel, nel) :: mat
+   integer :: i, j
+
+   do i = 1, nel
+      do j = 1, nel
+         mat(j, i) = (i-1)*nel + j-1
+      end do
+   end do
+end program loop_exchange