Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
63eba30
Initial prototype of neotrace viewer
alexreinking Jan 27, 2026
976104f
Add local_laplacian_trace / process_viz to build
alexreinking Jun 1, 2026
06b61f0
basic neotrace fixups
alexreinking Jun 1, 2026
f0e4428
pre-commit after rebase
alexreinking Jun 1, 2026
35f8ffe
Add profiling; fix render performance
alexreinking Jun 1, 2026
2a72494
Improve scrubbing performance
alexreinking Jun 1, 2026
770f50c
feat: Initial commit for basic client-server setup for Halidoscope.
Jun 3, 2026
be8d0b3
feat: Support full playback and forward scrubbing of Halide traces.
Jun 4, 2026
8b4379b
feat: Support RGB.
Jun 9, 2026
37724ab
feat: Add support for heatmap visualizations of load / store counts.
parkerziegler Jun 16, 2026
177efe2
feat: Migrate to Rust backend and add Histograms.
parkerziegler Jun 19, 2026
b99a4bc
feat: Add support for Reuse Distance visualization and highlight live…
parkerziegler Jun 24, 2026
50465c5
fix: Remove Python backend and shift Tauri app to root directory of a…
parkerziegler Jun 24, 2026
fbab915
Support produce-consume liveness highlighting and refactor backend wi…
parkerziegler Jun 25, 2026
7d6078f
Add CLI for snapshotting Func buffers at packet indices.
parkerziegler Jun 26, 2026
02f90dd
Add dot subcommand to Halidoscope CLI.
parkerziegler Jul 6, 2026
c5be346
Adjust packet parsing to accommodate #9192 and report thread count in…
parkerziegler Jul 7, 2026
f16afcc
Fix responsive text aliasing issues by using NodeToolbar.
parkerziegler Jul 7, 2026
5100266
Fix liveness producer-consumer derivation to align more closely with …
parkerziegler Jul 8, 2026
fa71d6a
Adjust liveness color mappings.
parkerziegler Jul 9, 2026
0643752
Adjust redundant store count metric to mark a redundant store only if…
parkerziegler Jul 9, 2026
a2fff55
Add support for normalization modes and real-time histogram rendering.
parkerziegler Jul 13, 2026
75ad04a
Add list and stats CLI subcommands.
parkerziegler Jul 13, 2026
613695b
Adjust halidoscope snapshot subcommand to return values as JSON.
parkerziegler Jul 14, 2026
a5f3b8d
Add docs on building Halidoscope, using the GUI and CLI, and developi…
parkerziegler Jul 14, 2026
f970819
Add support for NaN and inf rendering.
parkerziegler Jul 17, 2026
9e80fb6
Add support for Thread Coverage rendering.
parkerziegler Jul 21, 2026
33555f4
Dramatically improve rendering performancefor Load Frequency render m…
parkerziegler Jul 22, 2026
29f18c1
Add support for thread filtering and highlighting.
parkerziegler Jul 23, 2026
bc0b154
Back out changes to Python tracing infrastructure that are not on mai…
parkerziegler Jul 23, 2026
f886789
Add support for visualizing information from the Halide profiler.
parkerziegler Jul 26, 2026
2ccea15
Reduce IPC calls by shifting NaN/Inf overlay computation into the IPC…
parkerziegler Jul 27, 2026
872eb99
Support user-selected colors for NaN and Inf highlighting. Rework UI …
parkerziegler Jul 28, 2026
291dbda
Ignore demos.
parkerziegler Aug 10, 2026
c72836b
Add support for Grayscale render mode histograms.
parkerziegler Jul 30, 2026
c215362
Add basic support for RGB histograms.
parkerziegler Jul 30, 2026
6fe091a
Add .halidoscope method to Pipeline class.
parkerziegler Jul 31, 2026
eac9292
Support invoking Halidoscope with no arguments.
parkerziegler Aug 3, 2026
7db79ba
Apply clippy recommended fixes.
parkerziegler Aug 4, 2026
4fd8622
Reduce trace loading and parsing time 1.25x by combining stats comput…
parkerziegler Aug 4, 2026
a20dfc8
Adjust and document types for the frontend.
parkerziegler Aug 5, 2026
1cf261a
Add HalidoscopeOptions to allow callers of Pipeline::halidoscope to s…
parkerziegler Aug 5, 2026
3466a82
Allow callers of Pipeline::halidoscope to specify a non-volatile dire…
parkerziegler Aug 6, 2026
f211970
Fix missing end bin in histogram rendering and shift all render mode …
parkerziegler Aug 6, 2026
cf5d12e
Only include NaN and Inf overlay buffers when explicitly requested.
parkerziegler Aug 7, 2026
3cf0ade
Only request live Funcs during playback to reduce IPC calls.
parkerziegler Aug 7, 2026
ed472a6
Add more granular loading feedback to support XL traces.
parkerziegler Aug 10, 2026
ee7a0b6
Send NaN and Inf buffers as bit masks.
parkerziegler Aug 11, 2026
daf25c8
Fix caching scope bug in FuncNode.
parkerziegler Aug 11, 2026
ebec097
Use bindgen to derive halide_trace_packet_t's field names and offsets…
parkerziegler Aug 11, 2026
4b2cbf4
Introduce RAII type to support accumulating profiler stats in Halidos…
parkerziegler Aug 13, 2026
50e9aac
Standardize styles for Select and Checkbox components and reuse acros…
parkerziegler Aug 16, 2026
82f2400
Add new Profile UI.
parkerziegler Aug 17, 2026
d5a6b3c
Move halidoscope into the tools directory.
parkerziegler Aug 17, 2026
c82ba49
Remove erroneously committed files.
parkerziegler Aug 17, 2026
c6a37e1
Fix Halidoscope profiling pass to snapshot profiler stats once just b…
parkerziegler Aug 17, 2026
fb3e26c
Fix clang-tidy warnings.
parkerziegler Aug 18, 2026
48c7599
Check in Halidoscope's icon set.
parkerziegler Aug 19, 2026
5910996
Misc improvements to tooltips and styling in Profile tab.
parkerziegler Aug 19, 2026
44c1482
Make sizes a required argument for Pipeline::halidoscope's first over…
parkerziegler Aug 19, 2026
d35541d
Rework component directory structure for maintainability and clarity.
parkerziegler Aug 19, 2026
4690c04
Standardize Props naming convention.
parkerziegler Aug 19, 2026
c54cd58
Make all HalidoscopeOptions fields optional, and update README.
parkerziegler Aug 20, 2026
cc1d4fa
Add updated icons.
parkerziegler Aug 20, 2026
2011801
Remove unneeded icons.
parkerziegler Aug 20, 2026
5ded0b4
Add basic tests for Pipeline::halidoscope.
parkerziegler Aug 20, 2026
673bdec
Fix CI error on Windows owing to unreferenced local variable.
parkerziegler Aug 20, 2026
8e4ba63
Only run halidoscope tests with serialization enabled.
parkerziegler Aug 20, 2026
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
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,18 @@
################################################################################
## Halide-specific exclusions

# Images only allowed in apps and directories named "images"
# Images only allowed in apps, directories named "images", and Halidoscope's
# icon set
*.png
!apps/**/*.png
!**/images/**/*.png
!tools/halidoscope/src-tauri/icons/*.png

# Halidoscope is desktop-only; `tauri icon` also emits mobile (Android/iOS)
# assets we don't want to commit.
tools/halidoscope/src-tauri/icons/android/
tools/halidoscope/src-tauri/icons/ios/


# Pre-trained weights only allowed in autoscheduler directories
*.weights
Expand Down
40 changes: 40 additions & 0 deletions python_bindings/halide/src/halide_/PyPipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ void define_pipeline(py::module &m) {
return "<halide.AutoschedulerParams>";
});

py::class_<HalidoscopeOptions>(m, "HalidoscopeOptions")
.def(py::init<>())
.def_readwrite("halidoscope_path", &HalidoscopeOptions::halidoscope_path)
.def_readwrite("halidoscope_output_dir", &HalidoscopeOptions::halidoscope_output_dir)
.def_readwrite("halidoscope_profile_runs", &HalidoscopeOptions::halidoscope_profile_runs)
.def("__repr__", [](const HalidoscopeOptions &o) -> std::string {
return "<halide.HalidoscopeOptions halidoscope_path='" + o.halidoscope_path.value_or("halidoscope") +
"' halidoscope_output_dir='" + o.halidoscope_output_dir.value_or("") +
"' halidoscope_profile_runs=" + std::to_string(o.halidoscope_profile_runs.value_or(1)) + ">";
});

auto pipeline_class =
py::class_<Pipeline>(m, "Pipeline")
.def(py::init<>())
Expand Down Expand Up @@ -227,6 +238,35 @@ void define_pipeline(py::module &m) {
},
py::arg("dst"), py::arg("target") = Target())

// Development/debugging aid: see Pipeline::halidoscope() in Pipeline.h.
// Blocks until the Halidoscope window is closed, so the GIL must be
// released for the duration of the call, same as realize() above.
.def("halidoscope", //
[](Pipeline &p, Buffer<> buffer, const HalidoscopeOptions &options, const Target &target) -> void {
py::gil_scoped_release release;
p.halidoscope(Realization(std::move(buffer)), options, target); //
},
py::arg("dst"), py::arg("options") = HalidoscopeOptions(), py::arg("target") = Target())

// See the comment on the corresponding realize() overload above: this
// overload must be declared before the list-of-sizes one, so that an
// empty list [] is resolved as list-of-sizes (a 0-dimensional Buffer)
// rather than as an ambiguous empty list-of-buffers.
.def("halidoscope", //
[](Pipeline &p, std::vector<int32_t> sizes, const HalidoscopeOptions &options, const Target &target) -> void {
py::gil_scoped_release release;
p.halidoscope(std::move(sizes), options, target); //
},
py::arg("sizes") = std::vector<int32_t>{}, py::arg("options") = HalidoscopeOptions(), py::arg("target") = Target())

// This will actually allow a list-of-buffers as well as a tuple-of-buffers, but that's OK.
.def("halidoscope", //
[](Pipeline &p, std::vector<Buffer<>> buffers, const HalidoscopeOptions &options, const Target &target) -> void {
py::gil_scoped_release release;
p.halidoscope(Realization(std::move(buffers)), options, target); //
},
py::arg("dst"), py::arg("options") = HalidoscopeOptions(), py::arg("target") = Target())

.def("infer_input_bounds", //
[](Pipeline &p, const py::object &dst, const Target &target) -> void {
const Target t = to_jit_target(target);
Expand Down
Loading
Loading