Skip to content

WIP: Execution benchmark#1634

Draft
siramok wants to merge 25 commits into
task/JustinPrivitera/05_01_24/device_supportfrom
task/siramok/06_24_26/execution_benchmark
Draft

WIP: Execution benchmark#1634
siramok wants to merge 25 commits into
task/JustinPrivitera/05_01_24/device_supportfrom
task/siramok/06_24_26/execution_benchmark

Conversation

@siramok

@siramok siramok commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

The purpose of this PR is to create (some initial vision of) benchmarking infrastructure that is flexible enough to test arbitrary execution:: code. This should help us quantify performance improvements as we port existing portions of the codebase to use execution::. We discussed comparing performance across different execution policies, scaling to different data sizes and data types, and measuring data transfer overhead (host <--> device vs. same <--> same).

Currently has:

  • Atomic benchmarks
  • Reducer benchmarks
  • Mesh transform (coordset conversion) benchmarks

Comment thread src/libs/conduit/conduit_benchmark.hpp Outdated
Comment thread src/libs/conduit/conduit_benchmark.hpp Outdated
Comment on lines +289 to +290
// TODO: Do we care to have bespoke timing in the case that conduit was built
// without caliper?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Probably not, but we want to use other performance metrics. Caliper doesn't tell us everything we would like to know. Maybe we could explore some of these tools:

I think ultimately some combination of tools will be able to give us more insightful metrics than just using Caliper. Caliper is still useful as a baseline since we have it set up for easy use in Conduit, but it may be useful to look at expanding our Caliper options since it can do much more than we use it for: https://github.com/Alpine-DAV/ascent/wiki/Caliper-How-To

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

I removed this TODO.

Looks like caliper can be configured to output a file that hatchet can consume. Furthermore, it looks like thicket builds on hatchet, and therefore consumes the same data. I've changed the caliper config to output this file, but I think the file is currently getting overwritten for each benchmark combo, so I need to investigate a fix.

Comment thread src/libs/conduit/conduit_execution.cpp
Comment thread src/tests/blueprint/t_blueprint_mesh_transform_benchmark.cpp Outdated
Comment thread src/tests/blueprint/t_blueprint_mesh_transform_benchmark.cpp Outdated
Comment on lines +66 to +74
CONDUIT_ANNOTATE_MARK_FUNCTION;
benchmark::exec(coordset_uniform_to_explicit,
BENCHMARK_NUM_WARMUP_ITERATIONS,
BENCHMARK_NUM_ITERATIONS,
{benchmark::FillMode::None});
benchmark::exec(coordset_rectilinear_to_explicit,
BENCHMARK_NUM_WARMUP_ITERATIONS,
BENCHMARK_NUM_ITERATIONS,
{benchmark::FillMode::None});

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't understand; where are the execution options set? If we want to run the ported algorithms with different configurations, we need to set the execution options and then iteratively loop over the available execution options for execution location, output location, fallback location, and sync strategy. We will also need to experiment with having source data start on the host versus device. For these coordset transforms, we create destination data so we don't have to worry about where destination data starts.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Not implemented yet, but on the todo list.

@siramok siramok Jun 27, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

This has been added for execution location, however it revealed a problem that will need discussion on how to proceed:

Essentially, it's not good enough for t_blueprint_mesh_transform_benchmark.cpp to be compiled with CUDA/HIP TUs. We also have to do that for conduit_blueprint_mesh.cpp to get device support in the coordset transforms.

The problem is that attempting to do so on the entire file is currently not possible. NVCC throws several compilation errors due to the polyhedral_* functions (which have not been ported).

There are at least two solutions that I can think of, but both are (potentially) problematic for different reasons.

Co-authored-by: Justin Privitera <35237779+JustinPrivitera@users.noreply.github.com>
Comment thread src/tests/conduit/t_conduit_execution_benchmark.cpp Outdated
Comment thread src/tests/conduit/t_conduit_execution_benchmark.cpp Outdated
Comment thread src/tests/blueprint/CMakeLists.txt
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