#![cfg(feature = "wcoj-phase-timing")]
use xlog_cuda::wcoj_phase_timing::WcojTrianglePhaseTiming;
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct WcojDispatchPhaseTiming {
pub classifier_ms: f32,
pub layout_xy_ms: f32,
pub layout_yz_ms: f32,
pub layout_xz_ms: f32,
pub layout_total_ms: f32,
pub triangle_count_ms: f32,
pub triangle_scan_ms: f32,
pub triangle_total_ms: f32,
pub triangle_materialize_ms: f32,
pub triangle_gpu_total_ms: f32,
pub execute_plan_wall_ms: f32,
pub residual_overhead_ms: f32,
}
impl WcojDispatchPhaseTiming {
pub(crate) fn new(
classifier_ms: f32,
layout_xy_ms: f32,
layout_yz_ms: f32,
layout_xz_ms: f32,
triangle: WcojTrianglePhaseTiming,
execute_plan_wall_ms: f32,
) -> Self {
let layout_total_ms = layout_xy_ms + layout_yz_ms + layout_xz_ms;
let triangle_gpu_total_ms = triangle.triangle_gpu_total_ms();
let residual_overhead_ms =
execute_plan_wall_ms - classifier_ms - layout_total_ms - triangle_gpu_total_ms;
Self {
classifier_ms,
layout_xy_ms,
layout_yz_ms,
layout_xz_ms,
layout_total_ms,
triangle_count_ms: triangle.count_ms,
triangle_scan_ms: triangle.scan_ms,
triangle_total_ms: triangle.total_ms,
triangle_materialize_ms: triangle.materialize_ms,
triangle_gpu_total_ms,
execute_plan_wall_ms,
residual_overhead_ms,
}
}
}