From d670a7317cab4bd61953022a81dd99078f98f604 Mon Sep 17 00:00:00 2001 From: Stephen Jia Date: Tue, 2 Apr 2024 12:46:29 -0700 Subject: [PATCH] Remove obsolete vTensor members for buffer storage support (#2774) Summary: Pull Request resolved: https://github.com/pytorch/executorch/pull/2774 ## Context Support for using buffer storage for tensors in compute shaders will be reworked. For now, remove some of the obsolete mechanisms that were introduced to support buffer storage. Reviewed By: copyrightly Differential Revision: D55544884 fbshipit-source-id: 13fa952663602292119925bbf0aaac36fd75820d --- backends/vulkan/runtime/api/Tensor.cpp | 39 --------------- backends/vulkan/runtime/api/Tensor.h | 24 ---------- backends/vulkan/test/utils/test_utils.cpp | 58 +---------------------- 3 files changed, 2 insertions(+), 119 deletions(-) diff --git a/backends/vulkan/runtime/api/Tensor.cpp b/backends/vulkan/runtime/api/Tensor.cpp index 8ea8fa6b3d..89424abb2a 100644 --- a/backends/vulkan/runtime/api/Tensor.cpp +++ b/backends/vulkan/runtime/api/Tensor.cpp @@ -197,25 +197,6 @@ api::utils::uvec3 create_image_extents( } } -api::UniformParamsBuffer make_metadata_uniform( - api::Context* const context, - const std::vector& sizes, - const std::vector& strides, - const api::StorageType storage_type) { - if (storage_type != api::StorageType::BUFFER) { - return api::UniformParamsBuffer(); - } - - vTensor::BufferMetadata metadata{ - api::utils::make_whcn_uvec4(sizes), - api::utils::make_whcn_uvec4(strides), - api::utils::safe_downcast(sizes.size()), - api::utils::safe_downcast(api::utils::multiply_integers(sizes)), - }; - - return api::UniformParamsBuffer(context, metadata); -} - } // namespace // @@ -239,7 +220,6 @@ vTensor::vTensor( virtual_extents_( create_image_extents(gpu_sizes_, storage_type, memory_layout)), // Utility Uniform Buffers that can be passed to shaders as arguments - metadata_uniform_(), cpu_sizes_uniform_(nullptr), gpu_sizes_uniform_(nullptr), extents_uniform_(nullptr), @@ -270,7 +250,6 @@ vTensor::vTensor( virtual_extents_( create_image_extents(gpu_sizes_, storage_type, memory_layout)), // Vulkan uniform buffer containing sizes and stride info - metadata_uniform_(), cpu_sizes_uniform_(nullptr), gpu_sizes_uniform_(nullptr), extents_uniform_(nullptr), @@ -316,14 +295,6 @@ api::VulkanBuffer& vTensor::buffer( return view_->buffer_; } -api::VulkanBuffer& vTensor::buffer_metadata() { - if (!metadata_uniform_.buffer()) { - metadata_uniform_ = make_metadata_uniform( - view_->context_, gpu_sizes_, gpu_strides_, storage_type()); - } - return metadata_uniform_.buffer(); -} - std::shared_ptr vTensor::cpu_sizes_ubo() { if (!cpu_sizes_uniform_) { cpu_sizes_uniform_.reset(new api::UniformParamsBuffer( @@ -353,16 +324,6 @@ std::shared_ptr vTensor::extents_ubo() { return extents_uniform_; } -vTensor::BufferMetadata vTensor::get_cpu_buffer_metadata() const { - return { - api::utils::make_whcn_uvec4(sizes_), - api::utils::make_whcn_uvec4(strides_), - api::utils::safe_downcast(sizes_.size()), - api::utils::safe_downcast( - api::utils::multiply_integers(sizes_)), - }; -} - VmaAllocationCreateInfo vTensor::get_allocation_create_info() const { switch (storage_type()) { case api::StorageType::BUFFER: diff --git a/backends/vulkan/runtime/api/Tensor.h b/backends/vulkan/runtime/api/Tensor.h index 67542fdaa1..3ce34b9949 100644 --- a/backends/vulkan/runtime/api/Tensor.h +++ b/backends/vulkan/runtime/api/Tensor.h @@ -129,14 +129,6 @@ class vTensor final { vTensor(vTensor&& other) = default; vTensor& operator=(vTensor&& other) = default; - // Used for passing buffer sizes and strides data to shaders - struct BufferMetadata { - api::utils::uvec4 sizes; - api::utils::uvec4 strides; - uint32_t ndim; - uint32_t buffer_length; - }; - private: // Tensor Options api::ScalarType dtype_; @@ -159,10 +151,6 @@ class vTensor final { // to be interpreted as a tensor with a different size. api::utils::uvec3 virtual_extents_; - // A Vulkan uniform buffer containing sizes and strides of the GPU buffer that - // can be passed into a shader. - api::UniformParamsBuffer metadata_uniform_; - // A Vulkan uniform buffer containing the tensor sizes that can be passed into // a shader. std::shared_ptr cpu_sizes_uniform_; @@ -285,12 +273,6 @@ class vTensor final { return virtual_extents_; } - /* - * Get a uniform buffer containing sizes and strides information of the GPU - * buffer - */ - api::VulkanBuffer& buffer_metadata(); - /* * Get a uniform buffer object containing the tensor sizes to use in a compute * shader. Note that the UBO will be created the first time this function is @@ -312,12 +294,6 @@ class vTensor final { */ std::shared_ptr extents_ubo(); - /* - * Constructs a BufferMetdata struct based on the original sizes and strides - * to pass into a shader. - */ - BufferMetadata get_cpu_buffer_metadata() const; - inline void set_is_quantized() { is_quantized_ = true; } diff --git a/backends/vulkan/test/utils/test_utils.cpp b/backends/vulkan/test/utils/test_utils.cpp index ea051474a3..a4e3b2acb2 100644 --- a/backends/vulkan/test/utils/test_utils.cpp +++ b/backends/vulkan/test/utils/test_utils.cpp @@ -16,60 +16,6 @@ // Operator Recording Functions // -void record_nchw_to_buffer_op( - api::Context* const context, - api::VulkanBuffer& src_buffer, - vTensor& v_dst) { - uint32_t buf_len = api::utils::safe_downcast(v_dst.gpu_numel()); - api::utils::uvec3 global_size = {buf_len, 1u, 1u}; - api::utils::uvec3 local_size = {32u, 1u, 1u}; - - api::UniformParamsBuffer cpu_buffer_metadata( - context, v_dst.get_cpu_buffer_metadata()); - api::PipelineBarrier pipeline_barrier{}; - - context->submit_compute_job( - VK_KERNEL(buffer_to_buffer), - pipeline_barrier, - global_size, - local_size, - VK_NULL_HANDLE, - v_dst.buffer( - pipeline_barrier, - api::PipelineStage::COMPUTE, - api::MemoryAccessType::WRITE), - v_dst.buffer_metadata(), - src_buffer, - cpu_buffer_metadata.buffer()); -} - -bool record_buffer_to_nchw_op( - api::Context* const context, - vTensor& v_src, - api::VulkanBuffer& dst_buffer) { - uint32_t buf_len = api::utils::safe_downcast(v_src.numel()); - api::utils::uvec3 global_size = {buf_len, 1u, 1u}; - api::utils::uvec3 local_size = {4u, 1u, 1u}; - - api::UniformParamsBuffer cpu_buffer_metadata( - context, v_src.get_cpu_buffer_metadata()); - api::PipelineBarrier pipeline_barrier{}; - - return context->submit_compute_job( - VK_KERNEL(buffer_to_buffer), - pipeline_barrier, - global_size, - local_size, - VK_NULL_HANDLE, - dst_buffer, - cpu_buffer_metadata.buffer(), - v_src.buffer( - pipeline_barrier, - api::PipelineStage::COMPUTE, - api::MemoryAccessType::WRITE), - v_src.buffer_metadata()); -} - void record_nchw_to_image_op( api::Context* const context, api::VulkanBuffer& src_buffer, @@ -166,7 +112,7 @@ void fill_vtensor(vTensor& vten, std::vector& data) { copy_ptr_to_staging(data.data(), staging_buffer, vten.gpu_nbytes()); if (vten.storage_type() == api::StorageType::BUFFER) { - record_nchw_to_buffer_op(api::context(), staging_buffer.buffer(), vten); + VK_THROW("Not supported!"); } else { record_nchw_to_image_op(api::context(), staging_buffer.buffer(), vten); } @@ -192,7 +138,7 @@ void extract_vtensor(vTensor& vten, std::vector& data) { api::context(), api::kFloat, vten.gpu_numel()); if (vten.storage_type() == api::StorageType::BUFFER) { - record_buffer_to_nchw_op(api::context(), vten, staging_buffer.buffer()); + VK_THROW("Not supported!"); } else { record_image_to_nchw_op(api::context(), vten, staging_buffer.buffer()); }