-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature Request] Add Light Metal capture/replay initial changes to tt-metal for some workloads #17039
Comments
Here is high level overview of the changes I made for this ticket so far that I will roll out PR for. It basically adds limited (unsupported) support for tracing a bunch of popular APIs, and adds a few tests with correctness checking (reading output bufers, comparing between capture time and replay time, or to expected values) including some tests that use capture a program using "metal trace" and then replay it via Misc
Initial Infra
Host APIs Traced
Here is light from
Note that when Metal Trace is enabled, don't capture Testing
Caveats/Restrictions
|
…17039) - Mostly unused here, used by light metal capture/replay coming in follow up PR - Add CMAKE_POSITION_INDEPENDENT_CODE=ON (-fPIC) for flatbuffer to avoid linking errors when lifting to tt-mlir project. - Use -Wno-restrict for flatbuffers compile to supress warning in g++12 build
…17039) - Mostly unused here, used by light metal capture/replay coming in follow up PR - Add CMAKE_POSITION_INDEPENDENT_CODE=ON globally (-fPIC) following discussion (needed for flatbuffer to avoid linking errors when lifting to tt-mlir project. - Use -Wno-restrict for flatbuffers compile to supress warning in g++12 build, though don't know why they were fine previously with flatbuffers from UMD - Misc PR feedback about PUBLIC vs PRIVATE, etc.
…17039) - Mostly unused here, used by light metal capture/replay coming in follow up PR - Add CMAKE_POSITION_INDEPENDENT_CODE=ON globally (-fPIC) following discussion (needed for flatbuffer to avoid linking errors when lifting to tt-mlir project. - Use -Wno-restrict for flatbuffers compile to supress warning in g++12 build, though don't know why they were fine previously with flatbuffers from UMD - Misc PR feedback about PUBLIC vs PRIVATE, etc.
…re() and docs (#17039) - Unused for now, empty stubs, will be filled in by subsequent PR (baby steps) to denote start and end of capturing host+device workload
…re() and docs (#17039) - Unused for now, empty stubs, will be filled in by subsequent PR (baby steps) to denote start and end of capturing host+device workload
…re() and docs (#17039) - Unused for now, empty stubs, will be filled in by subsequent PR (baby steps) to denote start and end of capturing host+device workload
…il namespace (#17039) - Will be used by Light Metal replay after upcoming PR, when executing a metal-trace traced program from binary, TraceDescriptor is extracted from flatbuffer binary and loaded to device through this API. - Unrelated - Change trace_buffer.hpp to use fwd decl Buffer instead of buffer.hpp incl to reduce dependencies on users of trace_buffer.hpp
…il namespace (#17039) - Will be used by Light Metal replay after upcoming PR, when executing a metal-trace traced program from binary, TraceDescriptor is extracted from flatbuffer binary and loaded to device through this API. - Unrelated - Change trace_buffer.hpp to use fwd decl Buffer instead of buffer.hpp incl to reduce dependencies on users of trace_buffer.hpp
…il namespace (#17039) - Will be used by Light Metal replay after upcoming PR, when executing a metal-trace traced program from binary, TraceDescriptor is extracted from flatbuffer binary and loaded to device through this API. - Unrelated - Change trace_buffer.hpp to use fwd decl Buffer instead of buffer.hpp incl to reduce dependencies on users of trace_buffer.hpp
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates.
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates.
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates.
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates.
…17039) - Mostly unused here, used by light metal capture/replay coming in follow up PR - Add CMAKE_POSITION_INDEPENDENT_CODE=ON globally (-fPIC) following discussion (needed for flatbuffer to avoid linking errors when lifting to tt-mlir project. - Use -Wno-restrict for flatbuffers compile to supress warning in g++12 build, though don't know why they were fine previously with flatbuffers from UMD - Misc PR feedback about PUBLIC vs PRIVATE, etc.
…re() and docs (#17039) - Unused for now, empty stubs, will be filled in by subsequent PR (baby steps) to denote start and end of capturing host+device workload
…il namespace (#17039) - Will be used by Light Metal replay after upcoming PR, when executing a metal-trace traced program from binary, TraceDescriptor is extracted from flatbuffer binary and loaded to device through this API. - Unrelated - Change trace_buffer.hpp to use fwd decl Buffer instead of buffer.hpp incl to reduce dependencies on users of trace_buffer.hpp
…17039) - Mostly unused here, used by light metal capture/replay coming in follow up PR - Add CMAKE_POSITION_INDEPENDENT_CODE=ON globally (-fPIC) following discussion (needed for flatbuffer to avoid linking errors when lifting to tt-mlir project. - Use -Wno-restrict for flatbuffers compile to supress warning in g++12 build, though don't know why they were fine previously with flatbuffers from UMD - Misc PR feedback about PUBLIC vs PRIVATE, etc.
…re() and docs (#17039) - Unused for now, empty stubs, will be filled in by subsequent PR (baby steps) to denote start and end of capturing host+device workload
…il namespace (#17039) - Will be used by Light Metal replay after upcoming PR, when executing a metal-trace traced program from binary, TraceDescriptor is extracted from flatbuffer binary and loaded to device through this API. - Unrelated - Change trace_buffer.hpp to use fwd decl Buffer instead of buffer.hpp incl to reduce dependencies on users of trace_buffer.hpp
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates.
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates.
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Make to/from_flatbuffer() friend of CircularBufferConfig to access internals - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates. - All the PR feedback implemented. Add throws after switch statements for gcc12
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates. - All the PR feedback implemented. Add throws after switch statements for gcc12 - CircularBufferConfig needed tweaks, add accessors for 3 private members for capture, and new constructor to set all private members for replay, following lengthy PR/offline discussion (avoid friend).
…or various types (#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates. - All the PR feedback implemented. Add throws after switch statements for gcc12 - CircularBufferConfig needed tweaks, add accessors for 3 private members for capture, and new constructor to set all private members for replay, following lengthy PR/offline discussion (avoid friend).
…il namespace (tenstorrent#17039) - Will be used by Light Metal replay after upcoming PR, when executing a metal-trace traced program from binary, TraceDescriptor is extracted from flatbuffer binary and loaded to device through this API. - Unrelated - Change trace_buffer.hpp to use fwd decl Buffer instead of buffer.hpp incl to reduce dependencies on users of trace_buffer.hpp
…or various types (tenstorrent#17039) - Code is compiled, but not used by anything yet, will be used after subsequent merge of light metal capture/replay libraries. - Remove default case statements from case statements for enums so when new enum values are added, compile error is seen to force updates. - All the PR feedback implemented. Add throws after switch statements for gcc12 - CircularBufferConfig needed tweaks, add accessors for 3 private members for capture, and new constructor to set all private members for replay, following lengthy PR/offline discussion (avoid friend).
… tests (#17039) - This is round 4, builds upon previous 3 merges for LightMetal that brought flatbuffer cmake/infra, new APIs, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture hardcoded to run capture-only and skip replay until replay code is merged next
… tests (#17039) - This is round 5, builds upon previous 4 merges for LightMetal that brought flatbuffer cmake/infra, begin/end APIs, LoadTrace() API, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture runs capture-only right now, will automatically run binary once replay support is merged next.
…andalone runner (#17039) - This is round 6/6 for now, builds upon previous 5 merges for LightMetal in past week and enables e2e capture + replay in unit tests now that replay is supported. - This brings the replay library/executor for a LightMetalBinary which handles replaying all the commands and traces captured by workload to binary. Like capture time, complex objects are stored in map after creation, and referenced by global_id by functions that re-use them. - Light Metal standalone CLI runner initial infra which just loads an existing binary on disk and executes it using replay librarys's ExecuteLightMetalBinary()
…andalone runner (#17039) - This is round 6/6 for now, builds upon previous 5 merges for LightMetal in past week and enables e2e capture + replay in unit tests now that replay is supported. - This brings the replay library/executor for a LightMetalBinary which handles replaying all the commands and traces captured by workload to binary. Like capture time, complex objects are stored in map after creation, and referenced by global_id by functions that re-use them. - Light Metal standalone CLI runner initial infra which just loads an existing binary on disk and executes it using replay librarys's ExecuteLightMetalBinary()
… tests (#17039) - This is round 5, builds upon previous 4 merges for LightMetal that brought flatbuffer cmake/infra, begin/end APIs, LoadTrace() API, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture runs capture-only right now, will automatically run binary once replay support is merged next.
… tests (#17039) - This is round 5, builds upon previous 4 merges for LightMetal that brought flatbuffer cmake/infra, begin/end APIs, LoadTrace() API, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture runs capture-only right now, will automatically run binary once replay support is merged next.
…andalone runner (#17039) - This is round 6/6 for now, builds upon previous 5 merges for LightMetal in past week and enables e2e capture + replay in unit tests now that replay is supported. - This brings the replay library/executor for a LightMetalBinary which handles replaying all the commands and traces captured by workload to binary. Like capture time, complex objects are stored in map after creation, and referenced by global_id by functions that re-use them. - Light Metal standalone CLI runner initial infra which just loads an existing binary on disk and executes it using replay librarys's ExecuteLightMetalBinary()
… tests (#17039) - This is round 5, builds upon previous 4 merges for LightMetal that brought flatbuffer cmake/infra, begin/end APIs, LoadTrace() API, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture runs capture-only right now, will automatically run binary once replay support is merged next.
… tests (#17039) - This is round 5, builds upon previous 4 merges for LightMetal that brought flatbuffer cmake/infra, begin/end APIs, LoadTrace() API, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) Set TT_ENABLE_LIGHT_METAL_TRACE as project cmake option default ON and adjust usage - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture runs capture-only right now, will automatically run binary once replay support is merged next.
… tests (#17039) - This is round 5, builds upon previous 4 merges for LightMetal that brought flatbuffer cmake/infra, begin/end APIs, LoadTrace() API, flatbuffer/schema serialization/deserialization - This adds light-metal Capture support for and instruments with LIGHT_METAL_TRACE_FUNCTION_CALL() and LIGHT_METAL_TRACE_FUNCTION_ENTRY() to many popular (not exuahstive) APIs used by unit tests. The former TRACE_FUNCTION_ENTRY() is more recent, used to protect against host APIs recursively calling other host APIs (only trace top most level). Two macros not always called back-to-back. - Support Capture/Replay of the following ~14 host APIs EnqueueTrace(), ReplayTrace(), ReleaseTrace() CreateBuffer(), EnqueueWriteBuffer(), EnqueueReadBuffer(), DeallocateBuffer CreateKernel(), CreateCircularBuffer() SetRuntimeArgs(uint32) SetRuntimeArgs(Kernel,RuntimeArgs) CreateProgram(), EnqueueProgram() Finish() - During capture, complex objects like Programs, Kernels, Buffers, CBHandle are assigned unique global_id, and referred to by their global_id in capture when used by functions - When "Metal Trace" is enabled, don't capture EnqueueProgram(), instead inject ReplayTrace(), would be used alongside LoadTrace() - Can be optionally disabled at compile time using build_metal.sh --disable-light-metal-trace which will set C++ define TT_ENABLE_LIGHT_METAL_TRACE=0 (trace functions become NOP) Set TT_ENABLE_LIGHT_METAL_TRACE as project cmake option default ON and adjust usage - New Verif APIs LightMetalCompareToCapture() / LightMetalCompareToGolden(). Put them in lightmetal_capture_utils.hpp instead of host_api.hpp since they are purely used at capture time, and not worthy enough to be inside host_api.h since just for verif - Test fixture runs capture-only right now, will automatically run binary once replay support is merged next.
…andalone runner (#17039) - This is round 6/6 for now, builds upon previous 5 merges for LightMetal in past week and enables e2e capture + replay in unit tests now that replay is supported. - This brings the replay library/executor for a LightMetalBinary which handles replaying all the commands and traces captured by workload to binary. Like capture time, complex objects are stored in map after creation, and referenced by global_id by functions that re-use them. - Light Metal standalone CLI runner initial infra which just loads an existing binary on disk and executes it using replay librarys's ExecuteLightMetalBinary()
…andalone runner (#17039) - This is round 6/6 for now, builds upon previous 5 merges for LightMetal in past week and enables e2e capture + replay in unit tests now that replay is supported. - This brings the replay library/executor for a LightMetalBinary which handles replaying all the commands and traces captured by workload to binary. Like capture time, complex objects are stored in map after creation, and referenced by global_id by functions that re-use them. - Light Metal standalone CLI runner initial infra which just loads an existing binary on disk and executes it using replay librarys's ExecuteLightMetalBinary() - Some PR Reedback: Update asserts, remove default cases, more comments, etc.
…andalone runner (#17039) - This is round 6/6 for now, builds upon previous 5 merges for LightMetal in past week and enables e2e capture + replay in unit tests now that replay is supported. - This brings the replay library/executor for a LightMetalBinary which handles replaying all the commands and traces captured by workload to binary. Like capture time, complex objects are stored in map after creation, and referenced by global_id by functions that re-use them. - Light Metal standalone CLI runner initial infra which just loads an existing binary on disk and executes it using replay librarys's ExecuteLightMetalBinary() - Some PR Reedback: Update asserts, remove default cases, more comments, etc.
This is now closed - these initial light-metal capture/replay changes are now merged across 6 PR's (see list in comment above) over last 10 days, after incorporating a bunch of feedback, was around 3600 lines/additions as reported by git. Special thanks to Oleg for thorough review. Will add more work into parent ticket next that is being scoped out (some of it has already begun). |
Light Metal Feature Parent Ticket: #17037
Request
It's a new feature - put together initial/boostrapping changes to:
Should have opened this ticket last year, have already started/completed this chunk of work, has gone through a few rounds of reviews, will reply with details to this ticket and roll out PR more globally shortly.
The text was updated successfully, but these errors were encountered: