From bc14b5b670625bd46c3bef3c8c1facd91ad48973 Mon Sep 17 00:00:00 2001 From: Elliott Slaughter Date: Fri, 4 Sep 2026 09:44:39 -0700 Subject: [PATCH] ProfilingSettings takes a nonnegative_int and a positive_int. --- bin/run-model/src/run-model/main.cc | 4 +-- lib/kernels/include/kernels/profiling.h | 34 ++++++++----------- .../kernels/profiling_settings.dtg.toml | 10 ++++-- .../computation_graph_instance.cc | 12 +++---- .../cost_estimator/local_cost_estimator.cc | 8 ++--- .../local_task_argument_accessor.cc | 2 +- .../test/src/realm-execution/test_e2e.cc | 16 ++++----- 7 files changed, 44 insertions(+), 42 deletions(-) diff --git a/bin/run-model/src/run-model/main.cc b/bin/run-model/src/run-model/main.cc index 49c87d5a98..9d146115b2 100644 --- a/bin/run-model/src/run-model/main.cc +++ b/bin/run-model/src/run-model/main.cc @@ -99,7 +99,7 @@ int main(int argc, char **argv) { /*optimizer=*/optimizer_attrs, /*loss=*/std::nullopt, /*input_tensors=*/input_tensors, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle, /*device_type=*/DeviceType::GPU); @@ -108,7 +108,7 @@ int main(int argc, char **argv) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_pcg_instance( /*instance=*/pcg_instance, - /*profiling_settings=*/ProfilingSettings{0, 1}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle); } }); diff --git a/lib/kernels/include/kernels/profiling.h b/lib/kernels/include/kernels/profiling.h index 6b79f40359..6b8dbaa9bd 100644 --- a/lib/kernels/include/kernels/profiling.h +++ b/lib/kernels/include/kernels/profiling.h @@ -17,8 +17,8 @@ std::optional profiling_wrapper(F const &f, Ts &&...ts) { if (enable_profiling) { ProfilingSettings settings = ProfilingSettings{ - /*warmup_iters=*/0, - /*measure_iters=*/1, + /*warmup_iters=*/0_n, + /*measure_iters=*/1_p, }; return profiling_wrapper(f, settings, std::forward(ts)...); } else { @@ -28,15 +28,10 @@ std::optional profiling_wrapper(F const &f, } template -std::optional - profiling_wrapper(F const &f, - ProfilingSettings const &settings, - DeviceType device_type, - Ts &&...ts) { - if (settings.measure_iters <= 0) { - return std::nullopt; - } - +milliseconds_t profiling_wrapper(F const &f, + ProfilingSettings const &settings, + DeviceType device_type, + Ts &&...ts) { if (device_type == DeviceType::GPU) { return gpu_profiling_wrapper(f, settings, std::forward(ts)...); } else { @@ -49,8 +44,6 @@ template milliseconds_t cpu_profiling_wrapper(F const &f, ProfilingSettings const &settings, Ts &&...ts) { - ASSERT(settings.measure_iters > 0); - device_stream_t stream = get_cpu_device_stream(); using TimePoint = std::chrono::time_point; @@ -58,7 +51,9 @@ milliseconds_t cpu_profiling_wrapper(F const &f, std::optional start = std::nullopt; std::optional end = std::nullopt; - for (int i = 0; i < settings.warmup_iters + settings.measure_iters; i++) { + for (nonnegative_int i = 0_n; + i < settings.warmup_iters + settings.measure_iters; + ++i) { if (i == settings.warmup_iters) { start = std::chrono::steady_clock::now(); } @@ -67,7 +62,8 @@ milliseconds_t cpu_profiling_wrapper(F const &f, end = std::chrono::steady_clock::now(); std::chrono::duration avg_duration = - (end.value() - start.value()) / settings.measure_iters; + (end.value() - start.value()) / + settings.measure_iters.int_from_positive_int(); return milliseconds_t{ static_cast(avg_duration.count()), @@ -78,15 +74,15 @@ template milliseconds_t gpu_profiling_wrapper(F const &f, ProfilingSettings const &settings, Ts &&...ts) { - ASSERT(settings.measure_iters > 0); - device_stream_t stream = get_gpu_device_stream(); ffEvent_t t_start, t_end; checkCUDA(ffEventCreate(&t_start)); checkCUDA(ffEventCreate(&t_end)); - for (int i = 0; i < settings.warmup_iters + settings.measure_iters; i++) { + for (nonnegative_int i = 0_n; + i < settings.warmup_iters + settings.measure_iters; + ++i) { if (i == settings.warmup_iters) { checkCUDA(ffEventRecord(t_start, stream.require_gpu())); } @@ -100,7 +96,7 @@ milliseconds_t gpu_profiling_wrapper(F const &f, checkCUDA(ffEventDestroy(t_start)); checkCUDA(ffEventDestroy(t_end)); return milliseconds_t{ - elapsed / settings.measure_iters, + elapsed / settings.measure_iters.int_from_positive_int(), }; } diff --git a/lib/kernels/include/kernels/profiling_settings.dtg.toml b/lib/kernels/include/kernels/profiling_settings.dtg.toml index c9f19c3a50..434b3713b5 100644 --- a/lib/kernels/include/kernels/profiling_settings.dtg.toml +++ b/lib/kernels/include/kernels/profiling_settings.dtg.toml @@ -10,10 +10,16 @@ features = [ "fmt", ] +includes = [ + "utils/nonnegative_int/nonnegative_int.h", + "utils/positive_int/positive_int.h", +] + [[fields]] name = "warmup_iters" -type = "int" +type = "::FlexFlow::nonnegative_int" + [[fields]] name = "measure_iters" -type = "int" +type = "::FlexFlow::positive_int" diff --git a/lib/local-execution/test/src/local-execution/computation_graph_instance.cc b/lib/local-execution/test/src/local-execution/computation_graph_instance.cc index 569c6efee0..112db9db4d 100644 --- a/lib/local-execution/test/src/local-execution/computation_graph_instance.cc +++ b/lib/local-execution/test/src/local-execution/computation_graph_instance.cc @@ -161,7 +161,7 @@ TEST_SUITE(FF_TEST_SUITE) { }, /*input_tensors=*/input_tensors, /*allocator=*/allocator, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/ff_handle, /*global_device_id=*/global_device_id); @@ -172,7 +172,7 @@ TEST_SUITE(FF_TEST_SUITE) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_computation_graph_instance( /*instance=*/computation_graph_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*ff_handle=*/ff_handle, /*global_device_id=*/global_device_id); loss_values.push_back(copy_tensor_accessor_r( @@ -335,7 +335,7 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { }, /*input_tensors=*/input_tensors, /*allocator=*/allocator, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/ff_handle, /*device_idx=*/device_idx); @@ -348,7 +348,7 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_computation_graph_instance( /*instance=*/computation_graph_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*ff_handle=*/ff_handle, /*device_idx=*/device_idx); loss_values.push_back(copy_tensor_accessor_r( @@ -459,13 +459,13 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { }, /*input_tensors=*/input_tensors, /*allocator=*/allocator, - /*profiling_settings=*/ProfilingSettings{0, 1}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/ff_handle, /*device_idx=*/device_idx); perform_all_passes_for_computation_graph_instance( /*instance=*/computation_graph_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*ff_handle=*/ff_handle, /*device_idx=*/device_idx); assert_unwrap(computation_graph_instance.get_loss_tensor_accessor()); diff --git a/lib/local-execution/test/src/local-execution/cost_estimator/local_cost_estimator.cc b/lib/local-execution/test/src/local-execution/cost_estimator/local_cost_estimator.cc index 3d1b691a08..928a52a007 100644 --- a/lib/local-execution/test/src/local-execution/cost_estimator/local_cost_estimator.cc +++ b/lib/local-execution/test/src/local-execution/cost_estimator/local_cost_estimator.cc @@ -44,8 +44,8 @@ TEST_SUITE(FF_TEST_SUITE) { /*interconnect_specification=*/interconnect_specification, /*allocator=*/allocator, /*profiling_settings=*/ - ProfilingSettings{/*warmup_iters=*/0, - /*measure_iters=*/1}, + ProfilingSettings{/*warmup_iters=*/0_n, + /*measure_iters=*/1_p}, /*device_handle=*/ff_handle, /*device_idx=*/device_idx); @@ -121,8 +121,8 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { /*interconnect_specification=*/interconnect_specification, /*allocator=*/allocator, /*profiling_settings=*/ - ProfilingSettings{/*warmup_iters=*/0, - /*measure_iters=*/1}, + ProfilingSettings{/*warmup_iters=*/0_n, + /*measure_iters=*/1_p}, /*device_handle=*/ff_handle, /*device_idx=*/device_idx); diff --git a/lib/local-execution/test/src/local-execution/local_task_argument_accessor.cc b/lib/local-execution/test/src/local-execution/local_task_argument_accessor.cc index 31f7bc3e30..34ee46b0c3 100644 --- a/lib/local-execution/test/src/local-execution/local_task_argument_accessor.cc +++ b/lib/local-execution/test/src/local-execution/local_task_argument_accessor.cc @@ -62,7 +62,7 @@ TEST_SUITE(FF_TEST_SUITE) { LocalTaskArgumentAccessor acc = LocalTaskArgumentAccessor{ /*allocator=*/allocator, /*tensor_slots_backing=*/tensor_slots_backing, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*ff_handle=*/cpu_make_device_handle_t(), /*op_attrs=*/PCGOperatorAttrs{InputAttrs{input_tensor_shape}}, /*loss_attrs=*/std::nullopt, diff --git a/lib/realm-execution/test/src/realm-execution/test_e2e.cc b/lib/realm-execution/test/src/realm-execution/test_e2e.cc index 9ba4886b4b..1eaf268703 100644 --- a/lib/realm-execution/test/src/realm-execution/test_e2e.cc +++ b/lib/realm-execution/test/src/realm-execution/test_e2e.cc @@ -449,7 +449,7 @@ TEST_SUITE(FF_TEST_SUITE) { /*loss_mapping=*/cfg.loss_mapping, }, /*input_tensors=*/input_tensors, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle, /*device_type=*/DeviceType::CPU); @@ -460,7 +460,7 @@ TEST_SUITE(FF_TEST_SUITE) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_pcg_instance( /*instance=*/pcg_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle); loss_values.push_back(copy_tensor_accessor_r( dynamic_tensor_accessor_from_instance( @@ -522,7 +522,7 @@ TEST_SUITE(FF_TEST_SUITE) { /*optimizer=*/optimizer_attrs, /*loss=*/std::nullopt, /*input_tensors=*/input_tensors, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle, /*device_type=*/DeviceType::CPU); @@ -531,7 +531,7 @@ TEST_SUITE(FF_TEST_SUITE) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_pcg_instance( /*instance=*/pcg_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle); } }); @@ -579,7 +579,7 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { /*loss_mapping=*/cfg.loss_mapping, }, /*input_tensors=*/input_tensors, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle, /*device_type=*/DeviceType::GPU); @@ -590,7 +590,7 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_pcg_instance( /*instance=*/pcg_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle); loss_values.push_back(copy_tensor_accessor_r( @@ -657,7 +657,7 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { /*optimizer=*/optimizer_attrs, /*loss=*/std::nullopt, /*input_tensors=*/input_tensors, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle, /*device_type=*/DeviceType::GPU); @@ -666,7 +666,7 @@ TEST_SUITE(FF_CUDA_TEST_SUITE) { for (int i = 0; i < num_epochs; i++) { perform_all_passes_for_pcg_instance( /*instance=*/pcg_instance, - /*profiling_settings=*/ProfilingSettings{0, 0}, + /*profiling_settings=*/ProfilingSettings{0_n, 1_p}, /*device_handle=*/device_handle); } });