Skip to content

benches/splash4: Add SPLASH-4 benchmark suite#355

Merged
apaolillo merged 1 commit into
mainfrom
splash4
Jul 8, 2026
Merged

benches/splash4: Add SPLASH-4 benchmark suite#355
apaolillo merged 1 commit into
mainfrom
splash4

Conversation

@apaolillo

Copy link
Copy Markdown
Collaborator

Add a new-API benchmark for SPLASH-4, the m4/make-built suite of parallel kernels (FFT, LU, RADIX, OCEAN, BARNES, WATER, ...). The benchmark implements fetch/build/run/collect and covers all 15 kernels via a keyword-only Splash4Kernel registry.

The kernel is a build-time variable: build() selects and compiles it and carries the resolved recipe to run() via BuildResult.other, so run() only declares the true run-time variables (nb_threads, input_size). Kernels differ in invocation (flag args, leading-positional threads, and stdin-fed inputs), so run() assembles the command from the registry and executes it via bash -lc where stdin redirection is needed.

collect() returns a uniform schema (primary_time_us plus the with/without initialization times) so heterogeneous timing output aggregates into a non-ragged CSV; kernels without a single total (volrend) report None rather than failing the campaign point.

Add run-once and explicit-workflow tests plus small and full Cartesian campaigns (all kernels x thread-count sweep).

@apaolillo apaolillo requested a review from matsvanmolle July 5, 2026 20:43
@apaolillo apaolillo self-assigned this Jul 5, 2026
@apaolillo

Copy link
Copy Markdown
Collaborator Author

@theodegeest might be interested as well

@matsvanmolle matsvanmolle left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Add a new-API benchmark for SPLASH-4, the m4/make-built suite of
parallel kernels (FFT, LU, RADIX, OCEAN, BARNES, WATER, ...). The
benchmark implements fetch/build/run/collect and covers all 15 kernels
via a keyword-only Splash4Kernel registry.

The kernel is a build-time variable: build() selects and compiles it and
carries the resolved recipe to run() via BuildResult.other, so run()
only declares the true run-time variables (nb_threads, input_size).
Kernels differ in invocation (flag args, leading-positional threads, and
stdin-fed inputs), so run() assembles the command from the registry and
executes it via `bash -lc` where stdin redirection is needed.

collect() returns a uniform schema (primary_time_us plus the
with/without initialization times) so heterogeneous timing output
aggregates into a non-ragged CSV; kernels without a single total
(volrend) report None rather than failing the campaign point.

Add run-once and explicit-workflow tests plus small and full Cartesian
campaigns (all kernels x thread-count sweep).

Signed-off-by: Antonio Paolillo <apaolill@gmail.com>
@apaolillo apaolillo merged commit e5daaaa into main Jul 8, 2026
2 checks passed
@apaolillo apaolillo deleted the splash4 branch July 8, 2026 07:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants