Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Version numbers follow [Semantic Versioning](https://semver.org/).
## [Unreleased] — 2.0.0

### Added
- **`cuda-h200` CMake preset** (configure/build/test): CUDA backend, `CMAKE_CUDA_ARCHITECTURES=90` — the project default (86, A100) doesn't cover Hopper. Verified via `ctest --preset cuda-h200` on a gpuH200x8 node (NCSA Delta): 40/40 tests pass.
- **`TUPLStage`** (`modules/shufflers/tupl/`) — the LC framework's `TUPLk` lossless component: a tuple deinterleave (AoS → SoA) transpose. Given a block of `dim`-field tuples with `word_size`-byte fields, regroups the data field-major (all field-0 words, then field-1, ...) — a decorrelation step for downstream byte-oriented coders, not a compressor on its own (size-preserving). A genuinely different shape from every prior LC port: no bitmap/histogram/atomics, just a strided permutation, so it lands in `modules/shufflers/` alongside `BitshuffleStage` rather than the RRE-family container format. Faithful port of `d_TUPL`/`d_iTUPL`; unlike upstream (which generates one fixed `(dim, word_size)` instantiation per component — `TUPL2_1`, `TUPL6_8`, `TUPL12_1`, ... — over a hardcoded 16 KB chunk), `dim`, `word_size`, and `block_size` are all independent runtime parameters here, and intra-block leftover bytes (`block_size` not evenly divisible by `dim*word_size` — the common case for `dim` in {3, 6, 12} at LC's own default chunk size) are copied through unchanged rather than requiring an evenly-divisible configuration. `StageType::TUPL` (31), TOML `TUPL` stage, CLI `tupl[<dim>_<word_size>]` (e.g. `tupl6_4`).
- Test coverage: `test_tupl_stage.cpp` (16 tests — all of LC's canonical `(dim, word_size)` combinations including its two extremes (`TUPL12_1`, `TUPL6_8`), a hand-verified exact SoA layout check, an engineered case that exercises the intra-block leftover-byte path, a degenerate case where the block is smaller than one tuple, multi-block and partial-stream-tail cases, header round-trip, invalid-config throws, and a `LorenzoQuant→TUPL` pipeline integration test). Full suite green, `compute-sanitizer --tool memcheck` and `--tool racecheck` both clean.

Expand Down
25 changes: 25 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@
}
},

{
"name": "cuda-h200",
"inherits": "base",
"displayName": "CUDA (H200 / Hopper, sm_90)",
"description": "Release build against the CUDA backend for compute capability 9.0 (H100/H200). The project default (86, A100) does not cover Hopper, so this preset overrides CMAKE_CUDA_ARCHITECTURES explicitly.",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"FZGMOD_BACKEND": "CUDA",
"CMAKE_CUDA_ARCHITECTURES": "90"
}
},

{
"name": "compute-san",
"inherits": "base",
Expand Down Expand Up @@ -88,6 +100,11 @@
"configurePreset": "hip",
"displayName": "Build HIP (AMD ROCm)"
},
{
"name": "cuda-h200",
"configurePreset": "cuda-h200",
"displayName": "Build CUDA (H200 / Hopper)"
},
{
"name": "compute-san",
"configurePreset": "compute-san",
Expand Down Expand Up @@ -130,6 +147,14 @@
"output": { "outputOnFailure": true }
},

{
"name": "cuda-h200",
"configurePreset": "cuda-h200",
"displayName": "All tests (CUDA H200)",
"description": "Run the full test suite against the CUDA sm_90 (H200/Hopper) build.",
"output": { "outputOnFailure": true }
},

{
"name": "asan",
"configurePreset": "asan",
Expand Down
Loading