Skip to content

Releases: Shamrock-code/Shamrock

Shamrock 2025.10.0

28 Oct 09:14

Choose a tag to compare

The first Shamrock release to achieve quasi-exascale performance!

Outstanding changes

Aurora testing (close to exascale)

  • [Algs] Fix sparse communications above 1k nodes (aurora pullback) by @tdavidcl in #1133
  • [Math] Improve LatticeHCP performance by @tdavidcl in #980

These are just two of the numerous PRs that allowed Shamrock to exceed the 10,000-GPU milestone, resulting in an impressive performance milestone of 223 Gpart/s on 24,000 GPU tiles, with a parallel weak-scaling efficiency of 82.9%.

image

See https://shamrock-code.github.io/ for updated scores

Solvergraphs

This one isn’t the simplest, but it stems from a major issue common to complex codes. As the number of features, physical models, and modules implemented in a solver continues to grow, the code paths become increasingly tangled — full of conditionals, deeply nested functions, and opaque data flows. The result is a solver that’s hard to read, hard to modify, and difficult to maintain.

To address this, we need to untangle the mess.

Following discussions with @thomasguillet and taking inspiration from softwares like Blender, Autodesk Maya’s Hypergraph, or Quest3D (for those who remember it!), we realized that what’s needed is a graph-based API to express data flow between abstract modules.

Here is an example of a composition of nodes from blender

The idea is to represent each component of the solver as a node in such a graph, where the final output corresponds to the solver’s state after one timestep. We plan to write a more detailed post, document, or paper on this topic, but the TL;DR is that we’ve already implemented this concept in Shamrock, in a system we call Solvergraphs. For example, in a Godunov scheme, the conversion between conservative and primitive variables would be represented as a single node, such as ConsToPrim, but we do not want the node to be self-contained and independant on the sources and targets.
image

Now, if we apply this approach to the full solver, we get the following (although Graphviz doesn’t do a very good job of organizing the layout...)
image
(grey = data, white = node)

With the new Solvergraph API, we can now express modules independently of the specific data they operate on. This greatly improves reusability, allowing modules to be used across the codebase with different sets of inputs and outputs.
The next step, planned for a future release, is to fully migrate all solvers to this API and further simplify development — both on the C++ side and through graphical external tools or Python bindings.

Others

Addition of Shamrock restart dumps to the Ramses solver:

Multiple analysis modules were added for SPH:

As well as features in setups:

The possibility of directly installing python bindings without having to fiddle with .so (s):

  • [CMake] add CMAKE_INSTALL_PYTHONDIR to automate python libs install by @tdavidcl in #1217

There have also been changes on the physics side, but you’ll have to check arXiv in the coming months (hopefully) for the details ;)

What's Changed

  • pull back from release/2025.05.x to main by @tdavidcl in #946
  • [Git] change mdspan remote to http by @tdavidcl in #949
  • [Ramses] fix a typo in face interpolation by @tdavidcl in #951
  • [Patch] fix a missing const on PatchDataFieldSpan accessors by @tdavidcl in #953
  • [Ci] add concurency group to have only a single CI running per PR by @tdavidcl in #954
  • [Base] add set diff & on_distributeddata_diff by @tdavidcl in #955
  • [CI] add github page artifact to PR report by @tdavidcl in #957
  • [Backends] allow const DistributedData use in distributed kernel call by @tdavidcl in #958
  • [Doc] update packaging information, quickstart guide and README by @tdavidcl in #956
  • [SolverGraph] add shamrock solvergraph API to compose modules by @tdavidcl in #959
  • [Solvergraph] Implement NodeFreeAlloc to add alloc freeing in the graph by @tdavidcl in #976
  • [Ramses][solvergraph PR 2] move ConsToPrim spans & field to SolverStorage by @tdavidcl in #961
  • [SolverGraph] wrap IDataEdge tex symbol in brackets by @tdavidcl in #965
  • [Models] make set_solver_config consistent across models by @tdavidcl in #966
  • [CI] report tests error using Github action log format by @tdavidcl in #968
  • [CI] clean test outputs with MPI by @tdavidcl in #969
  • [SolverGraph] new FieldRefs layer, between Field and FieldSpan by @tdavidcl in #970
  • [Shamcomm] fix: remove extra print in gather_str by @tdavidcl in #973
  • [Env] update acpp 24.10.0 -> 25.02.0 by @tdavidcl in #972
  • [Ramses][solvergraph PR 1] Migrate ConsToPrim to use solvergraph by @tdavidcl in #960
  • [Solvergraph] make edge span & ref getter abstract using interfaces by @tdavidcl in #975
  • [Env] add env for Argonne Aurora supercomputer by @tdavidcl in #911
  • [Ci] fix missreporting of test errors in github action by @tdavidcl in #977
  • [CI] add godunov tests with dust by @tdavidcl in #978
  • [Ramses][solvergraph PR 3] replace ConsToPrim by solvergraph modules by @tdavidcl in #962
  • [CI] attempt to use a common docker image for all physical tests by @tdavidcl in #979
  • [Comm][Aurora pullback] improve MPI status log in startup by @tdavidcl in #982
  • [Logs] fix some typos in init logs by @tdavidcl in #984
  • [Ramses][solvergraph PR 6] Use distributed refs instead of copy by @tdavidcl in #985
  • [Ramses][solvergraph PR 4] ComputeCellInfos use solvergraph internally by @tdavidcl in #964
  • sod_tube_zeus.py: Fix undefined name vx by @cclauss in #988
  • [Doc] replace shamrock homebrew tap refs by homebrew-core by @tdavidcl in #989
  • [CI] add godunov sod test with AMR=on by @tdavidcl in #992
  • [Ramses][solvergraph PR 5] AMRTree use solvergraph internally by @tdavidcl in #971
  • [Ramses][solvergraph PR 7] Use NodeBuildTrees instead of legacy AMRTree by @tdavidcl in #993
  • Fix typo by @cclauss in #994
  • pre-commit: Add ruff linter for Python code by @cclauss in #990
  • [Ramses][solvergraph PR 8] Migrate AMRGraphGen to solvergraph by @tdavidcl in #995
  • [Ramses][solvergraph PR 9] Merge beginning of the step as a single OperationSequence by @tdavidcl in #996
  • [Ramses][solvergraph PR 10] Move ComputeAABB node in main solver sequence by @tdavidcl in #997
  • [Math] add paving functions for ghost zones by @tdavidcl in #987
  • [Ramses][solvergraph PR 11] Migrate gradients to solvegraph by @tdavidcl in #999
  • [Ramses] migrate link fields & AMRGraph to USM by @tdavidcl in #1001
  • [Base] use numerical limits to set shortcut one by @tdavidcl in #1003
  • [Phys] Binary orbit utility by @tdavidcl in #1007
  • [Ramses][solve...
Read more

Shamrock 2025.05.0

01 May 12:56

Choose a tag to compare

Not the largest release (pretty chill month overall) but some notable stuff anyway

Docker release of Shamrock

Shamrock now systematically release docker container on main. This allow a simple solution to test the code independently of system configuration.

Provided that you have docker installed (https://docs.docker.com/engine/install/, or brew install --cask docker on Macos) you can use shamrock directly without having to compile it.

Pulling the image:

docker pull --platform=linux/amd64 ghcr.io/shamrock-code/shamrock:latest-oneapi

Running the image:

docker run -it --platform=linux/amd64 ghcr.io/shamrock-code/shamrock:latest-oneapi

followed by shamrock to run it, or start python and then import shamrock

Jupyter notebook:

docker run -i -t -v $(pwd):/work -p 8888:8888 --platform=linux/amd64 ghcr.io/shamrock-code/shamrock:latest-oneapi jupyter notebook --allow-root --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=''

It will start a jupyter notebook inside the container and alias the current directory you terminal is in to /work in the container which is the default directory. In principle jupyter should just open in the current directory. You can also remove the -v $(pwd):/work to use only a temporary storage.

After that just go to http://127.0.0.1:8888

Outstanding stuff

  • Addition of mdspan to Shamrock sub-modules
    After much reflexion we decided that using kokkos/mdspan (the reference implementation of std::mdspan) was the proper solution to implement matrix algorithm in shamrock as well as some span related things.
  • Remove the distinction between pylib mode and executable mode.
    This allows effectively to install both the python lib and executable mode simultaneously.
  • Redesign of shamrock --smi to have a shorter output on large clusters (looking at you Aurora :) )
    Exemple with the AdaptiveCpp OpenMP backend on Macos :
 ----- Shamrock SMI ----- 
 
Available devices :

1 x Nodes: --------------------------------------------------------------------------------
| id |      Device name          |      Platform name     |  Type  |    Memsize   | units |
-------------------------------------------------------------------------------------------
|  0 |  AdaptiveCpp OpenMP h ... |    OpenMP (platform 0) |    CPU |     64.00 GB |    16 | 
-------------------------------------------------------------------------------------------

Selected devices : (totals can be wrong if using multiple rank per devices)
  - 1 x AdaptiveCpp OpenMP host device (id=0)
  Total memory : 64.00 GB
  Total compute units : 16

What's Changed

  • [CMake] add install target for shamrock packaging by @tdavidcl in #851
  • Revert "[CMake] add install target for shamrock packaging" by @tdavidcl in #852
  • Reland "[CMake] add install target for shamrock packaging" by @tdavidcl in #853
  • [Shamrock] disable git info outside of git by @tdavidcl in #854
  • [Doc][Readme] add shamrock paper 1 refs by @tdavidcl in #858
  • [Bindings] hide exe/pylib compile flags switch inside shambindings sources by @tdavidcl in #860
  • [Buildbot] Generalize license checking tool by @tdavidcl in #864
  • [Cmake] update version requirement by @tdavidcl in #865
  • [Bindings] remove the distinction between pylib mode and executable mode by @tdavidcl in #862
  • [Pylib] use correct init function by @tdavidcl in #866
  • [Main] cleanup by @tdavidcl in #868
  • [external] update pybind11 to v2.13.6 by @tdavidcl in #867
  • [Cmake] support using system provided pybind11 by @tdavidcl in #869
  • [Env][Macos] use adaptivecpp from homebrew-core by @tdavidcl in #870
  • [Cmake] clean library handling by @tdavidcl in #871
  • [README] add slack link by @tdavidcl in #872
  • [Env][Conda] pin acpp and clang versions by @tdavidcl in #875
  • [CI] update runner images to new containers by @tdavidcl in #874
  • [Env] Standardise env generation using new EngGen class by @tdavidcl in #877
  • [SPH][Setup] fix and add control over initial h factor for disc setup by @tdavidcl in #879
  • [Cmake] add detect for group reduction support by @tdavidcl in #880
  • [Env] fix dgx env by @tdavidcl in #882
  • [Algs] improve group reduction switching for acpp SSCP backend by @tdavidcl in #881
  • [Exemples] remove old sedov_taylor.txt by @tdavidcl in #888
  • [Pre-commit] update precommit modules by @tdavidcl in #885
  • [Sys] avoid printing multiple time direct GPU comm by @tdavidcl in #883
  • [Env] change lumi llvm vers to 17 by @tdavidcl in #889
  • [Math] add multiple derivative estimator by @tdavidcl in #890
  • [Cmake] print more shamrock configuration options by @tdavidcl in #893
  • [Base] add warning if nvtx used without profiling by @tdavidcl in #892
  • [Patch] improve PatchDataFieldSpan handling by @tdavidcl in #894
  • [Env][Nix] fix nix again ... (missing CUDA backend) by @tdavidcl in #899
  • [Algs] migrate serialize to USM by @tdavidcl in #873
  • [Cmake] Improve acpp configure logs by @tdavidcl in #902
  • [Ramses] allow calling of ConsToPrim on onther fields by @tdavidcl in #903
  • [Tree] allow constructing ReducedMortonSet from cached buffers by @tdavidcl in #906
  • [CI] add support for intel/oneapi docker by @tdavidcl in #908
  • [Env][docker.intel_oneapi] Fix NaNs emitted by random gen in test by @tdavidcl in #910
  • [Env] Allow installing shamrock executable with pip by @tdavidcl in #912
  • [Doc] add vertical profile to disc exemple & fix it ... by @tdavidcl in #913
  • [Git] add mdspan as subproject by @tdavidcl in #917
  • [Base] add custom assertion wrapper (for use in kernels) by @tdavidcl in #922
  • [Math] rewrite some old matrix utils using mdspan by @tdavidcl in #920
  • [CMake] add check on git submodule commit hash by @tdavidcl in #925
  • [Math] add more matrix utility functions by @Akos299 in #928
  • [CI] Build & release a shamrock docker container by @tdavidcl in #930
  • [Sys] improve shamrock smi mode by @tdavidcl in #931
  • [Backends] fix potential integer overflow in alloc size by @tdavidcl in #934
  • [CMake] Allow disabling SYCL header inclusion in cmake by @tdavidcl in #933
  • [Backends] detect physical memory size & correct it on acpp OpenMP backend by @tdavidcl in #935
  • [Sys] add micro GPU benchmark to post startup benchmarks by @tdavidcl in #932
  • [Tree] implement KarrasRadixTree (USM version of the current one) by @tdavidcl in #936
  • [Patch] fix dumb typo in SchedulerUtility::compute_rank_sum by @tdavidcl in #938
  • [Comm][Backends] rework the DGPU forced state (to also enable it on any platform) by @tdavidcl in #937
  • [ComputeField] Add interface for dot_sum collective by @Akos299 in #939
  • [Math] matrix exponential algorithms by @Akos299 in #914

Full Changelog: v2025.03.1...v2025.05.0

Shamrock 2025.03.1

13 Mar 21:14
7dee647

Choose a tag to compare

What's Changed

  • add the missing install target required for homebrew packaging
  • Hotfix to update version number

Full Changelog: v2025.03.0...v2025.03.1

Shamrock 2025.03.0

12 Mar 15:30
63e2ee4

Choose a tag to compare

The first public major release of Shamrock !

Outstanding changes

  • AMR refinment in Ramses model
  • Dust 2-fluid solver in Ramses model
  • Ideal-MHD in SPH
  • Every model is now a cmake subproject
  • Most of the code was migrated from sycl::buffer to USM allocations

PRs

  • [AMR][Godunov] enable grid refinement by @tdavidcl in #632
  • [AMR][Godunov] add HLLC Riemann solver by @Akos299 in #640
  • [Profiling] new profiling interface in Shamrock by @tdavidcl in #647
  • [Patch] migrate PatchDataFields from sycl::buffer to USM allocations by @tdavidcl in #672
  • [Godunov][AMR] [buffer -> usm] dust transport by @Akos299 in #737
  • [Main] introduce --smi arg to list all possible compute devices directly with shamrock by @tdavidcl in #830
  • [Doc] add sphinx doc for the python bindings by @tdavidcl in #813
  • [Models] track mem usage in schemes by @tdavidcl in #705
  • [MHD] Functional solver on linear wave tests. by @y-lapeyre in #707
  • [CI][Env] add conda env by @tdavidcl in #776
  • [Godunov][AMR] irk1 drag integrator by @Akos299 in #740

What's Changed

Read more

Shamrock 2024.10.1

11 Mar 20:46

Choose a tag to compare

What's Changed

  • add missing commits to Release/2024.10.x by @tdavidcl in #846
  • fix version file ouside of git

Full Changelog: v2024.10.0...v2024.10.1

Shamrock 2024.10.0 (Deprecated)

06 Oct 15:55
af9852a

Choose a tag to compare

Version corresponding to the PHD defense.

What's Changed

Read more

Shamrock 0.8.0-alpha (Deprecated)

30 Jun 20:08
50efd4e

Choose a tag to compare

Pre-release

First pre-release of the code corresponding to the PHD manuscript submission

History of PRs

Read more