Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
faeafbf
Initial prototype of neotrace viewer
alexreinking Jan 27, 2026
fb48110
Add local_laplacian_trace / process_viz to build
alexreinking Jun 1, 2026
a34c93a
basic neotrace fixups
alexreinking Jun 1, 2026
407bd28
pre-commit after rebase
alexreinking Jun 1, 2026
0992fd0
Add profiling; fix render performance
alexreinking Jun 1, 2026
569c5af
Improve scrubbing performance
alexreinking Jun 1, 2026
da7f6ce
feat: Initial commit for basic client-server setup for Halidoscope.
Jun 3, 2026
91c7461
feat: Support full playback and forward scrubbing of Halide traces.
Jun 4, 2026
46bc26c
feat: Support RGB.
Jun 9, 2026
95c6a87
feat: Add support for heatmap visualizations of load / store counts.
parkerziegler Jun 16, 2026
d2df594
feat: Migrate to Rust backend and add Histograms.
parkerziegler Jun 19, 2026
b422490
feat: Add support for Reuse Distance visualization and highlight live…
parkerziegler Jun 24, 2026
8f005fd
fix: Remove Python backend and shift Tauri app to root directory of a…
parkerziegler Jun 24, 2026
3b0c7fe
Support produce-consume liveness highlighting and refactor backend wi…
parkerziegler Jun 25, 2026
170ba98
Add CLI for snapshotting Func buffers at packet indices.
parkerziegler Jun 26, 2026
a123e5c
Add dot subcommand to Halidoscope CLI.
parkerziegler Jul 6, 2026
15aae94
Adjust packet parsing to accommodate #9192 and report thread count in…
parkerziegler Jul 7, 2026
905a3cb
Fix responsive text aliasing issues by using NodeToolbar.
parkerziegler Jul 7, 2026
dbe0d84
Fix liveness producer-consumer derivation to align more closely with …
parkerziegler Jul 8, 2026
e166252
Adjust liveness color mappings.
parkerziegler Jul 9, 2026
1cf9834
Adjust redundant store count metric to mark a redundant store only if…
parkerziegler Jul 9, 2026
3a3aa0e
Add support for normalization modes and real-time histogram rendering.
parkerziegler Jul 13, 2026
6528a95
Add list and stats CLI subcommands.
parkerziegler Jul 13, 2026
2677287
Adjust halidoscope snapshot subcommand to return values as JSON.
parkerziegler Jul 14, 2026
9a8a71d
Add docs on building Halidoscope, using the GUI and CLI, and developi…
parkerziegler Jul 14, 2026
c53642c
Add support for NaN and inf rendering.
parkerziegler Jul 17, 2026
b76d210
Add support for Thread Coverage rendering.
parkerziegler Jul 21, 2026
3586f11
Dramatically improve rendering performancefor Load Frequency render m…
parkerziegler Jul 22, 2026
000dc59
Add support for thread filtering and highlighting.
parkerziegler Jul 23, 2026
3b8d41e
Back out changes to Python tracing infrastructure that are not on mai…
parkerziegler Jul 23, 2026
32bcae2
Add support for visualizing information from the Halide profiler.
parkerziegler Jul 26, 2026
b3a2b01
Reduce IPC calls by shifting NaN/Inf overlay computation into the IPC…
parkerziegler Jul 27, 2026
807238b
Support user-selected colors for NaN and Inf highlighting. Rework UI …
parkerziegler Jul 28, 2026
ac10696
Ignore demos.
parkerziegler Aug 10, 2026
32a72d9
Add support for Grayscale render mode histograms.
parkerziegler Jul 30, 2026
880bedf
Add basic support for RGB histograms.
parkerziegler Jul 30, 2026
3f8e2eb
Add .halidoscope method to Pipeline class.
parkerziegler Jul 31, 2026
33ec35e
Support invoking Halidoscope with no arguments.
parkerziegler Aug 3, 2026
d06ff0a
Apply clippy recommended fixes.
parkerziegler Aug 4, 2026
a7c1c2c
Reduce trace loading and parsing time 1.25x by combining stats comput…
parkerziegler Aug 4, 2026
018baa9
Adjust and document types for the frontend.
parkerziegler Aug 5, 2026
5aa84fa
Add HalidoscopeOptions to allow callers of Pipeline::halidoscope to s…
parkerziegler Aug 5, 2026
f0d732c
Allow callers of Pipeline::halidoscope to specify a non-volatile dire…
parkerziegler Aug 6, 2026
15a54ba
Fix missing end bin in histogram rendering and shift all render mode …
parkerziegler Aug 6, 2026
80d7824
Only include NaN and Inf overlay buffers when explicitly requested.
parkerziegler Aug 7, 2026
872f6d2
Only request live Funcs during playback to reduce IPC calls.
parkerziegler Aug 7, 2026
eb90f26
Add more granular loading feedback to support XL traces.
parkerziegler Aug 10, 2026
43a7351
Send NaN and Inf buffers as bit masks.
parkerziegler Aug 11, 2026
4dcdffe
Fix caching scope bug in FuncNode.
parkerziegler Aug 11, 2026
c3ca886
Use bindgen to derive halide_trace_packet_t's field names and offsets…
parkerziegler Aug 11, 2026
ebd2c37
Introduce RAII type to support accumulating profiler stats in Halidos…
parkerziegler Aug 13, 2026
74fb406
Standardize styles for Select and Checkbox components and reuse acros…
parkerziegler Aug 16, 2026
f49357d
Add new Profile UI.
parkerziegler Aug 17, 2026
901a1a6
Move halidoscope into the tools directory.
parkerziegler Aug 17, 2026
2bb7a79
Remove erroneously committed files.
parkerziegler Aug 17, 2026
43e9773
Fix Halidoscope profiling pass to snapshot profiler stats once just b…
parkerziegler Aug 17, 2026
efcc470
Fix clang-tidy warnings.
parkerziegler Aug 18, 2026
c0703b4
Check in Halidoscope's icon set.
parkerziegler Aug 19, 2026
2d740cf
Misc improvements to tooltips and styling in Profile tab.
parkerziegler Aug 19, 2026
553ad60
Make sizes a required argument for Pipeline::halidoscope's first over…
parkerziegler Aug 19, 2026
8c532c3
Rework component directory structure for maintainability and clarity.
parkerziegler Aug 19, 2026
815a7ef
Standardize Props naming convention.
parkerziegler Aug 19, 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
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@
################################################################################
## 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


# Pre-trained weights only allowed in autoscheduler directories
*.weights
Expand Down
40 changes: 40 additions & 0 deletions python_bindings/src/halide/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 +
"' halidoscope_output_dir='" + o.halidoscope_output_dir.value_or("") +
"' halidoscope_profile_runs=" + std::to_string(o.halidoscope_profile_runs) + ">";
});

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