Skip to content

Commit

Permalink
Remove obsolete vTensor members for buffer storage support (#2774)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #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
  • Loading branch information
SS-JIA authored and facebook-github-bot committed Apr 2, 2024
1 parent eed70fa commit d670a73
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 119 deletions.
39 changes: 0 additions & 39 deletions backends/vulkan/runtime/api/Tensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,25 +197,6 @@ api::utils::uvec3 create_image_extents(
}
}

api::UniformParamsBuffer make_metadata_uniform(
api::Context* const context,
const std::vector<int64_t>& sizes,
const std::vector<int64_t>& 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<uint32_t>(sizes.size()),
api::utils::safe_downcast<uint32_t>(api::utils::multiply_integers(sizes)),
};

return api::UniformParamsBuffer(context, metadata);
}

} // namespace

//
Expand All @@ -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),
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -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<api::UniformParamsBuffer> vTensor::cpu_sizes_ubo() {
if (!cpu_sizes_uniform_) {
cpu_sizes_uniform_.reset(new api::UniformParamsBuffer(
Expand Down Expand Up @@ -353,16 +324,6 @@ std::shared_ptr<api::UniformParamsBuffer> 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<uint32_t>(sizes_.size()),
api::utils::safe_downcast<uint32_t>(
api::utils::multiply_integers(sizes_)),
};
}

VmaAllocationCreateInfo vTensor::get_allocation_create_info() const {
switch (storage_type()) {
case api::StorageType::BUFFER:
Expand Down
24 changes: 0 additions & 24 deletions backends/vulkan/runtime/api/Tensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_;
Expand All @@ -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<api::UniformParamsBuffer> cpu_sizes_uniform_;
Expand Down Expand Up @@ -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
Expand All @@ -312,12 +294,6 @@ class vTensor final {
*/
std::shared_ptr<api::UniformParamsBuffer> 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;
}
Expand Down
58 changes: 2 additions & 56 deletions backends/vulkan/test/utils/test_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<uint32_t>(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<uint32_t>(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,
Expand Down Expand Up @@ -166,7 +112,7 @@ void fill_vtensor(vTensor& vten, std::vector<float>& 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);
}
Expand All @@ -192,7 +138,7 @@ void extract_vtensor(vTensor& vten, std::vector<float>& 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());
}
Expand Down

0 comments on commit d670a73

Please sign in to comment.