---
# System prepended metadata

title: Julia for High-Performance Scientific Computing - Day 2
tags: [Julia, '2024']

---

![](https://media.enccs.se/2024/09/julia-for-hpc-autumn2-2024.webp)


<p style="text-align: center"><b><font size=5 color=blueyellow>Julia for High-Performance Scientific Computing - Day 2</font></b></p>


:::success
**Julia for High-Performance Scientific Computing — Schedule**: https://hackmd.io/@yonglei/julia-hpc-2024-schedule
:::


## Schedule for Day 2 -- [Julia for HPC](https://enccs.github.io/julia-for-hpc/)

| Time (CET)  | Time (EET)  | Instructors |Contents |
| :---------: | :---------: | :---------: | :------: |
| 09:30-10:00 | 10:30-10:50 | Yonglei     | Motivation (Julia HPC) |
| 10:00-11:30 | 10:50-12:30 | Yonglei     | Writing performant Julia code |
| 11:30-12:30 | 12:30-13:30 |             | ==Lunch Break== |
| 12:30-13:20 | 13:30-14:30 | Pedro       | Multithreading |
| 13:20-13:30 | 14:20-14:30 |             | Break |
| 13:30-14:20 | 14:30-15:20 | Pedro       | Distributed computing |
| 14:20-14:30 | 15:20-15:30 |             | Buffer time, Q&A |


---

## Exercises and Links


**Lesson material**:
- [Introduction to programming in Julia](https://enccs.github.io/julia-intro/)
- [Julia for high-performance scientific computing](https://enccs.github.io/julia-for-hpc/)


**Top 10 HPC clusters**
- https://top500.org/lists/top500/2024/11/


**GPU programming – When, Why, and How**
- [recorded video](https://www.youtube.com/watch?v=Yv87u2zQPJU&list=PL2GgjY1xUzfCwdcqcvXD17qyWhW4wM_Sy)
- [lesson material](https://enccs.github.io/gpu-programming/)


**Practical Intro to GPU programming using**
- Python
    - [recorded video](https://www.youtube.com/watch?v=qydP7cOH4qc)
    - [material for demo](https://github.com/ENCCS/webinar_documents)
- Julia
    - [recorded video](https://www.youtube.com/watch?v=9n97yCgFCWA&t=3s)
    - [material for demo](https://github.com/ENCCS/webinar_documents)


---

:::danger
You can ask questions about the workshop content at the bottom of this page. We use the Zoom chat only for reporting Zoom problems and such.
:::


## Questions, answers and information


### Motivation (for Julia HPC)


### Writing performant Julia code


- All this kind of benchmarks tools take into account that the first time that you run a Julia code is slower than the consecutives ones?
    - A short answer is yes. When you run the code at the first time, usually you need to install packages/libraries and their dependencies, this takes time and the efficiency is not high.
    - You can run the code for 2nd and 3rd time to see the benchmarking results.
    - For your personal project, a better way is to manage all the used libraries and packages and their dependencies using the `package manager` so that you don't need to worry about the version things of these package.


:::info
**System Settings for PC**
- ==M=2048, N=2048, 2000 steps==
- value for boundary cells, 2.0

|  ID | Benchmark | Column- or row-major order | `@inbounds` | other tips | Note |
| :-: | :-------: | :------------------------: | :---------: | :--------: | :--: |
| YL  |  3.142 ms |          38.099 ms         |   1.952 ms  |            | PC |
| MT  |  4.118 ms |                            |   3.860 ms  |            | PC |
| YL  |  3.364 ms |          45.502 ms         |   2.294 ms  |            | PC |
| YL  | 4.452 ms | xxx ps | 2.354 ms |   | LUMI-Setting (2048\*2048, 2000) |
| YL  | 2.492 ms | xxx ps | 2.112 ms |   | LUMI-Setting (2048\*2048, 2000) |


**System Settings for LUMI script**
- ==M=256, N=256, 1000 steps==
- value for boundary cells, 2.0
- ==Time unit is `pico second`==

|  ID | Benchmark | Column- or row-major order | `@inbounds` | other tips | Note |
| :-: | :-------: | :------------------------: | :---------: | :--------: | :--: |
| PC  |  18705 s |     128394 ps            |   17193 ps |            | PC |
| XX  | xxxxx ps | xxx ps | xxxxx ps |   | LUMI |
| XX  | 29447 ps | xxx ps | 25169 ps |   | LUMI |
| XX  | 25950 ps | xxx ps | 22000 ps |   | LUMI |
| XX  | 22000 ps | xxx ps | 19949 ps |   | LUMI |
| XX  | 25389 ps | xxx ps | 19948 ps |   | LUMI |
| YL  | 25109 ps | xxx ps | 23215 ps |   | LUMI-Setting (256\*256, 1000) |
:::


- I see that `*.toml` files are used for some kind of versioning. Can you elaborate how to use it properly?
    - you can get two `toml` files if you run the code on LUMI. one is `project.toml` and the other is `manifest.toml`.
    - these two files that are central to `package manager` and include information about package dependencies, versions and package names, etc.
    - if you copy the `project.toml` to another machine, you can rebuild the same programming environment to reproduce your computational results.
    - this is super important for the `reproduciable reserch`
    - more info about these two `tmol` files are listed [HERE](https://pkgdocs.julialang.org/v1/toml-files/)


- What are the time-units provided when we run the code in LUMI? I see number in the .out file but I don't know if they are ns, ms or what.
    - the time unit for the running on LUMI should be `ps`
    - YL: for the code example `performant-template.jl`, I got 19898 for the setting `256*256, 1000`.
    - YL: If I update the setting to `2048*2048, 2000`, the time will be 2.112e6. If we compare the time to that from PC computing, `2.112 ms = 2.112e6 ps`. So the time unit from the code example on LUMI should be `pico second`


### Multithreading


- In the spawn and fetch example, the thread remains occupied until fetch is called ?
- If I interface Julia with a C library that uses OpenMP for parallelization, is the execution via Julia also done in parallel ? Is it only if openmp is installed ?
    - If the library parallelises with OpenMP, you need OpenMP from the C side anyway. That said, yes, if you call a C function from Julia and that function has a `#pragma omp for`, it will be multithreaded; you do need to set the relevant environment variable `$OMP_NUM_THREADS` for it to work.


### Distributed computing


---

:::info
*Always ask questions at the very bottom of this document, right **above** this.*
::: 

---
