-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #148 from esciencecenter-digital-skills/create-ds-…
…julia create metadata for the Julia workshop
- Loading branch information
Showing
12 changed files
with
233 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<div style="background: red; color: black;">FIXME</div> | ||
|
||
The Julia programming language is getting more and more popular as a language for data analysis, modelling and optimization problems. It promises the ease of Python or R with a run-time efficiency closer to C or Fortran. Getting started with Julia is indeed relatively easy, however making Julia code that runs fast is not so straight forward. This hands-on workshop teaches both best practices as well as making Julia code performant. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
The Julia programming language is getting more and more popular as a language for data analysis, modelling and optimization problems. It promises the ease of Python or R with a run-time efficiency closer to C or Fortran. Julia also is a more modern language with a packaging ecosystem that makes packages easier to install and maintain. A programmer that is familiar with Python, R or Matlab should have little problem getting up to speed with the basics of Julia. However, to really obtain the promised near native run-time efficiency is a different skill altogether. | ||
|
||
This workshop aims to get research software engineers (experienced in another programming language) from their first steps in Julia to become aware of all the major techniques and pitfalls when it comes to writing performant Julia. | ||
|
||
We will work hands-on with real-world examples to explore concepts in the Julia language, focussing on differences with other languages. After the first day, you will be familiar with the basic constructs of the language, some popular libraries, and its package manager, including unit testing and documentation. | ||
|
||
The second day we will dive deeper in making Julia code fast to run. We'll see how to benchmark and profile code, and find out what is fast and slow. This means getting to grips with Julia's type system and its compilation strategy. We will close the day with parallel programming and using the GPU to make our code even faster. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
https://esciencecenter-digital-skills.github.io/efficient-computing-in-julia/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
<div style="background: red; color: black;">FIXME</div> | ||
|
||
There are two lists of schedules: online and in-person. Please delete the | ||
contents of the lists and fill it with your own. | ||
|
||
## Expected contents | ||
|
||
Different schedules for either online or in-person workshops. | ||
|
||
## Example | ||
|
||
## Online schedules | ||
|
||
<details><summary> | ||
Schedule 1 | ||
</summary> | ||
|
||
``` | ||
<div class="row"> | ||
<div class="col-md-6"> | ||
<h3>Day 1</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome and icebreaker </td> </tr> | ||
<tr> <td>09:15</td> <td>Introduction</td> </tr> | ||
<tr> <td>09:30</td> <td>Convolve an image with a kernel on a GPU using CuPy</td> </tr> | ||
<tr> <td>10:15</td> <td>Coffee break</td> </tr> | ||
<tr> <td>10:30</td> <td>Running CPU/GPU agnostic code using CuPy</td> </tr> | ||
<tr> <td>11:30</td> <td>Coffee break</td> </tr> | ||
<tr> <td>11:45</td> <td>Run your Python code on a GPU using Numba</td> </tr> | ||
<tr> <td>12:45</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
<div class="col-md-6"> | ||
<h3>Day 2</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome and icebreaker</td> </tr> | ||
<tr> <td>09:15</td> <td>Introduction to CUDA</td> </tr> | ||
<tr> <td>10:15</td> <td>Coffee break</td> </tr> | ||
<tr> <td>10:30</td> <td>CUDA memories and their use</td> </tr> | ||
<tr> <td>11:30</td> <td>Coffee break</td> </tr> | ||
<tr> <td>11:45</td> <td>Data sharing and synchronization</td> </tr> | ||
<tr> <td>12:45</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
</div> | ||
<p><b>All times in the schedule are in the CET timezone.</b></p> | ||
``` | ||
</details> | ||
|
||
<details><summary> | ||
Schedule 2 | ||
</summary> | ||
|
||
``` | ||
<div class="row"> | ||
<div class="col-md-6"> | ||
<h3>Day 1</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome and icebreaker</td> </tr> | ||
<tr> <td>09:15</td> <td>Introduction</td></tr> | ||
<tr> <td>10:00</td> <td>Break</td></tr> | ||
<tr> <td>10:15</td> <td>Measuring performance</td> </tr> | ||
<tr> <td>11:00</td> <td>Parallelization using Dask Arrays</td> </tr> | ||
<tr> <td>12:00</td> <td>Coffee break</td> </tr> | ||
<tr> <td>12:15</td> <td>Accelerate code using Numba</td> </tr> | ||
<tr> <td>12:45</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td></tr> | ||
</table> | ||
</div> | ||
<div class="col-md-6"> | ||
<h3>Day 2</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome,icebreaker and recap</td> </tr> | ||
<tr> <td>09:15</td> <td>Delayed evaluation with Dask</td> </tr> | ||
<tr> <td>10:30</td> <td>Coffee break</td> </tr> | ||
<tr> <td>10:45</td> <td>Parallel design patterns with Dask Bags</td></tr> | ||
<tr> <td>12:00</td> <td>Tea break</td> </tr> | ||
<tr> <td>12:15</td> <td>Exercise in word counting using Dask Bags</td></tr> | ||
<tr> <td>12:45</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
<div class="col-md-6"> | ||
<h3>Day 3</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome, icebreaker and recap</td> </tr> | ||
<tr> <td>09:15</td> <td>Dependency based programming with Snakemake</td> </tr> | ||
<tr> <td>10:30</td> <td>Coffee break</td> </tr> | ||
<tr> <td>10:45</td> <td>Break-out exercises</td></tr> | ||
<tr> <td>12:00</td> <td>Tea break</td> </tr> | ||
<tr> <td>12:15</td> <td>Presentations of group work</td> </tr> | ||
<tr> <td>12:45</td> <td>Post-workshop Survey</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
</div> | ||
``` | ||
</details> | ||
|
||
## In-person schedules | ||
|
||
<details><summary> | ||
Schedule 1 | ||
</summary> | ||
|
||
``` | ||
<div class="row"> | ||
<div class="col-md-6"> | ||
<h3>Day 1</h3> | ||
<table class="table table-striped"> | ||
<tr> <th>local Amsterdam time</th> <th>what</th></tr> | ||
<tr> <td>09:30</td> <td>Welcome and icebreaker</td> </tr> | ||
<tr> <td>09:45</td> <td>Introduction</td></tr> | ||
<tr> <td>10:30</td> <td>Break</td></tr> | ||
<tr> <td>10:40</td> <td>Measuring performance</td> </tr> | ||
<tr> <td>10:30</td> <td>Break</td></tr> | ||
<tr> <td>11:40</td> <td>Parallelization using Dask Arrays</td> </tr> | ||
<tr> <td>12:30</td> <td>Lunch Break</td></tr> | ||
<tr> <td>13:30</td> <td>Accelerate code using Numba</td> </tr> | ||
<tr> <td>14:30</td> <td>Break</td></tr> | ||
<tr> <td>14:40</td> <td>Delayed evaluation with Dask</td> </tr> | ||
<tr> <td>15:30</td> <td>Break</td></tr> | ||
<tr> <td>15:40</td> <td>Threads and Processes in Python</td> </tr> | ||
<tr> <td>16:15</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>16:30</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
<div class="col-md-6"> | ||
<h3>Day 2</h3> | ||
<table class="table table-striped"> | ||
<tr> <th>local Amsterdam time</th> <th>what</th></tr> | ||
<tr> <td>09:30</td> <td>Welcome and recap</td> </tr> | ||
<tr> <td>09:45</td> <td>Parallel design patterns with Dask Bags</td></tr> | ||
<tr> <td>10:30</td> <td>Break</td></tr> | ||
<tr> <td>10:40</td> <td>Dependency based programming with Snakemake</td> </tr> | ||
<tr> <td>11:30</td> <td>Break</td></tr> | ||
<tr> <td>11:40</td> <td>Explain and choose big exercise</td></tr> | ||
<tr> <td>12:30</td> <td>Lunch Break</td></tr> | ||
<tr> <td>13:30</td> <td>Work on exercise</td></tr> | ||
<tr> <td>15:40</td> <td>5min presentations</td></tr> | ||
<tr> <td>16:15</td> <td>Post-workshop Survey</td> </tr> | ||
<tr> <td>16:30</td> <td>Drinks</td> </tr> | ||
</table> | ||
</div> | ||
</div> | ||
``` | ||
</details> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
* https://github.com/carstenbauer/JuliaUCL24 | ||
* https://docs.julialang.org/en/v1/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<div style="background: red; color: black;">FIXME</div> | ||
|
||
Please delete the contents of this file and fill it with your own. You can | ||
choose one schedule from the lists in | ||
(list-of-schedules.md)[./list-of-schedules.md] and copy-paste the schedule here. | ||
|
||
## Expected contents | ||
|
||
The times and what you will be teaching at each day in a time-table format. | ||
|
||
## Example of a 2-day workshop schedule | ||
|
||
<div class="row"> | ||
<div class="col-md-6"> | ||
<h3>Day 1</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome and icebreaker </td> </tr> | ||
<tr> <td>09:15</td> <td>Introduction</td> </tr> | ||
<tr> <td>09:30</td> <td>Convolve an image with a kernel on a GPU using CuPy</td> </tr> | ||
<tr> <td>10:15</td> <td>Coffee break</td> </tr> | ||
<tr> <td>10:30</td> <td>Running CPU/GPU agnostic code using CuPy</td> </tr> | ||
<tr> <td>11:30</td> <td>Coffee break</td> </tr> | ||
<tr> <td>11:45</td> <td>Run your Python code on a GPU using Numba</td> </tr> | ||
<tr> <td>12:45</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
<div class="col-md-6"> | ||
<h3>Day 2</h3> | ||
<table class="table table-striped"> | ||
<tr> <td>09:00</td> <td>Welcome and icebreaker</td> </tr> | ||
<tr> <td>09:15</td> <td>Introduction to CUDA</td> </tr> | ||
<tr> <td>10:15</td> <td>Coffee break</td> </tr> | ||
<tr> <td>10:30</td> <td>CUDA memories and their use</td> </tr> | ||
<tr> <td>11:30</td> <td>Coffee break</td> </tr> | ||
<tr> <td>11:45</td> <td>Data sharing and synchronization</td> </tr> | ||
<tr> <td>12:45</td> <td>Wrap-up</td> </tr> | ||
<tr> <td>13:00</td> <td>END</td> </tr> | ||
</table> | ||
</div> | ||
</div> | ||
|
||
<p><b>All times in the schedule are in the CET timezone.</b></p> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
- You need a decent laptop with priviliges to install software. Julia is a compiled language and compiling can be demanding on your CPU. Specifically, something like a Chromebook or similar will definitely not do. | ||
- Install Julia by following the instruction on [the Julia webpage, downloads section](https://julialang.org/downloads/). | ||
- If you have time, explore the [Julia Manual](https://docs.julialang.org/en/v1/). This is not mandatory, but you will learn a lot more in the workshop if you are prepared. | ||
- Prepare the courses package environment. A link will be provided. | ||
- Install [VS Code](https://code.visualstudio.com/). VS Code is the de-facto standard IDE for Julia. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
## Syllabus | ||
|
||
- Basics of Julia: build a model of our solar system | ||
* operations, control flow, functions | ||
* `Unitful` quantities, `Dataframes` and plotting with `Makie` | ||
* types and dispatch | ||
* arrays and broadcasting | ||
- Package development: solving Cubic equations | ||
* working with the REPL, and `Pkg` | ||
* best practices with `BestieTemplate` | ||
* testing with `Test`, documentation with `Documenter` | ||
- Faster code: a logistic population model | ||
* `BenchmarkTools` and `ProfileView` (flame graphs) | ||
* Optimisation techniques | ||
* The type system in more depth | ||
* Type stability | ||
* Parallel programming: `Threads` and GPU programming (with Julia fractals) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This workshop teaches how to write efficient code in Julia, single-threaded, multi-threaded and on the GPU. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Efficient Computing in Julia |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
1. Is Julia the language you want to get fast with in 2025? Follow our workshop! [link] | ||
2. Did you hear about this shiny language called Julia? Here's how you can make it run fast! [link] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This workshop is aimed at scientists (PhD, Post-doc and beyond) and Research Software Engineers that are experienced in another programming language like Python, R or Matlab. |