-
Notifications
You must be signed in to change notification settings - Fork 712
[devtool] introduce datasink class to etdump #8496
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
Merged
facebook-github-bot
merged 12 commits into
gh/gasoonjia/1/base
from
gh/gasoonjia/1/head
Feb 25, 2025
Merged
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
90e6322
[devtool] introduce datasink class to etdump
Gasoonjia 9597b5f
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia 5da4e5e
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia 9c23038
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia b06769e
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia 5af97e3
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia 3a77f70
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia 0f8db1e
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia a40bfd7
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia d8fe0e3
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia 2899286
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia f2fbce9
Update on "[devtool] introduce datasink class to etdump"
Gasoonjia File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| /* | ||
| * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
| * All rights reserved. | ||
| * | ||
| * This source code is licensed under the BSD-style license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
|
|
||
| #include <executorch/devtools/etdump/buffer_data_sink.h> | ||
| #include <executorch/devtools/etdump/utils.h> | ||
|
|
||
| using ::executorch::runtime::Error; | ||
| using ::executorch::runtime::Result; | ||
|
|
||
| namespace executorch { | ||
| namespace etdump { | ||
|
|
||
| Result<size_t> BufferDataSink::write(const void* ptr, size_t length) { | ||
| if (length == 0) { | ||
| return offset_; | ||
| } | ||
|
|
||
| uint8_t* last_data_end = debug_buffer_.data() + offset_; | ||
|
|
||
| // The beginning of the next data blob must be aligned to the alignment | ||
| uint8_t* cur_data_begin = internal::align_pointer(last_data_end, alignment_); | ||
| uint8_t* cur_data_end = cur_data_begin + length; | ||
|
|
||
| if (cur_data_end > debug_buffer_.data() + debug_buffer_.size()) { | ||
| ET_LOG(Error, "Ran out of space to store intermediate outputs."); | ||
| return Error::OutOfResources; | ||
| } | ||
|
|
||
| // Zero out the padding between data blobs | ||
| memset(last_data_end, 0, cur_data_begin - last_data_end); | ||
| memcpy(cur_data_begin, ptr, length); | ||
| offset_ = (size_t)(cur_data_end - debug_buffer_.data()); | ||
|
|
||
| return (size_t)(cur_data_begin - debug_buffer_.data()); | ||
| } | ||
|
|
||
| Result<size_t> BufferDataSink::get_storage_size() const { | ||
| return debug_buffer_.size(); | ||
| } | ||
|
|
||
| size_t BufferDataSink::get_used_bytes() const { | ||
| return offset_; | ||
| } | ||
|
|
||
| } // namespace etdump | ||
| } // namespace executorch | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| /* | ||
| * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
| * All rights reserved. | ||
| * | ||
| * This source code is licensed under the BSD-style license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
|
|
||
| #pragma once | ||
|
|
||
| #include <executorch/devtools/etdump/data_sink_base.h> | ||
| #include <executorch/runtime/core/exec_aten/exec_aten.h> | ||
| #include <executorch/runtime/core/span.h> | ||
|
|
||
| namespace executorch { | ||
| namespace etdump { | ||
|
|
||
| /** | ||
| * BufferDataSink is a concrete implementation of the DataSinkBase class, | ||
| * designed to store debug data in a pre-allocated, user-owned buffer. This | ||
| * class provides methods to write raw data and tensor data into the buffer, | ||
| * ensuring proper alignment and managing padding as needed. | ||
| */ | ||
| class BufferDataSink : public DataSinkBase { | ||
| public: | ||
| /** | ||
| * Constructs a BufferDataSink with a given buffer. | ||
| * | ||
| * @param[in] buffer A Span object representing the buffer where data will be | ||
| * stored. | ||
| * @param[in] alignment The alignment requirement for the buffer. It must be | ||
| * a power of two. Default is 64. | ||
| */ | ||
| explicit BufferDataSink( | ||
| ::executorch::runtime::Span<uint8_t> buffer, | ||
| size_t alignment = 64) | ||
| : debug_buffer_(buffer), offset_(0), alignment_(alignment) {} | ||
|
|
||
| // Uncopiable and unassignable to avoid double assignment and free of the | ||
| // internal buffer. | ||
| BufferDataSink(const BufferDataSink&) = delete; | ||
| BufferDataSink& operator=(const BufferDataSink&) = delete; | ||
|
|
||
| // Movable to be compatible with Result. | ||
| BufferDataSink(BufferDataSink&&) = default; | ||
| BufferDataSink& operator=(BufferDataSink&&) = default; | ||
|
|
||
| ~BufferDataSink() override = default; | ||
|
|
||
| /** | ||
| * Write data into the debug buffer and return the offset of the starting | ||
| * location of the data within the buffer. | ||
| * | ||
| * @param[in] ptr A pointer to the data to be written into the storage. | ||
| * @param[in] size The size of the data in bytes. | ||
| * @return A Result object containing either: | ||
| * - The offset of the starting location of the data within the | ||
| * debug buffer, or | ||
| * - An error code indicating the failure reason, if any issue | ||
| * occurs during the write process. | ||
| */ | ||
| ::executorch::runtime::Result<size_t> write(const void* ptr, size_t size) | ||
| override; | ||
|
|
||
| /** | ||
| * Retrieves the total size of the buffer. | ||
| * | ||
| * @return A Result object containing the total size of the buffer in bytes. | ||
| */ | ||
| ::executorch::runtime::Result<size_t> get_storage_size() const; | ||
|
|
||
| /** | ||
| * Retrieves the number of bytes currently used in the buffer. | ||
| * | ||
| * @return The amount of data currently stored in the buffer in bytes. | ||
| */ | ||
| size_t get_used_bytes() const override; | ||
|
|
||
| private: | ||
| // A Span object representing the buffer used for storing debug data. | ||
| ::executorch::runtime::Span<uint8_t> debug_buffer_; | ||
|
|
||
| // The offset of the next available location in the buffer. | ||
| size_t offset_; | ||
|
|
||
| // The alignment of the buffer. | ||
| size_t alignment_; | ||
| }; | ||
|
|
||
| } // namespace etdump | ||
| } // namespace executorch |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,61 @@ | ||
| /* | ||
| * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
| * All rights reserved. | ||
| * | ||
| * This source code is licensed under the BSD-style license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
|
|
||
| #pragma once | ||
|
|
||
| #include <executorch/runtime/core/exec_aten/exec_aten.h> | ||
| #include <executorch/runtime/core/result.h> | ||
|
|
||
| namespace executorch { | ||
| namespace etdump { | ||
|
|
||
| /** | ||
| * DataSinkBase is an abstract class that users can inherit and implement | ||
| * to customize the storage and management of debug data in ETDumpGen. This | ||
| * class provides a basic and essential interface for writing datablob to a | ||
| * user-defined storage, retrieving storage capacity, and tracking the amount of | ||
| * data stored. | ||
| */ | ||
| class DataSinkBase { | ||
| public: | ||
| /** | ||
| * Virtual destructor to ensure proper cleanup of derived classes. | ||
| */ | ||
|
|
||
| virtual ~DataSinkBase() = default; | ||
| /** | ||
| * Write data into the debug storage. This method should be implemented | ||
| * by derived classes to handle the specifics of data storage. | ||
| * | ||
| * This function should return the offset of the starting location of the | ||
| * data within the debug storage if the write operation succeeds, or an | ||
| * Error code if any issue occurs during the write process. | ||
| * | ||
| * @param[in] ptr A pointer to the data to be written into the storage. | ||
| * @param[in] length The size of the data in bytes. | ||
| * @return A Result object containing either: | ||
| * - The offset of the starting location of the data within the | ||
| * debug storage, which will be recorded in the corresponding | ||
| * metadata of ETDump, or | ||
| * - An error code indicating the failure reason, if any issue | ||
| * occurs during the write process. | ||
| */ | ||
| virtual ::executorch::runtime::Result<size_t> write( | ||
| const void* ptr, | ||
| size_t length) = 0; | ||
|
|
||
| /** | ||
| * Get the number of bytes currently used in the debug storage. | ||
| * | ||
| * @return The amount of data currently stored in bytes. | ||
| */ | ||
| virtual size_t get_used_bytes() const = 0; | ||
| }; | ||
|
|
||
| } // namespace etdump | ||
| } // namespace executorch |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.