Skip to content

Commit db0d49e

Browse files
committed
[ET-VK] Store unique ptr to StagingBuffer and SymInt in Value instead of inlined object, to reduce Value struct size from 80 to 32 bytes.
Pull Request resolved: #7152 This diff aims to reduce the size of the `Value` struct from 80 bytes to 32 bytes by storing a unique pointer to `StagingBuffer` and `SymInt` instead of inlining the objects. ghstack-source-id: 257227239 @exported-using-ghexport Differential Revision: [D66677759](https://our.internmc.facebook.com/intern/diff/D66677759/)
1 parent b9db0a3 commit db0d49e

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

backends/vulkan/runtime/graph/containers/Value.h

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ struct Value final {
5959
} u;
6060

6161
std::unique_ptr<api::vTensor> as_tensor;
62-
api::StagingBuffer as_staging;
62+
std::unique_ptr<api::StagingBuffer> as_staging;
6363
TensorRef as_tensorref;
6464

6565
std::vector<int64_t> as_int_list;
@@ -73,7 +73,7 @@ struct Value final {
7373

7474
std::string as_string;
7575

76-
SymInt as_symint;
76+
std::unique_ptr<SymInt> as_symint;
7777

7878
Payload() : u() {}
7979
// NOLINTNEXTLINE
@@ -117,9 +117,7 @@ struct Value final {
117117
CASE_MOVE_TRIVIALLY_COPYABLE_TYPE(TypeTag::INT, as_int);
118118
CASE_MOVE_TRIVIALLY_COPYABLE_TYPE(TypeTag::DOUBLE, as_double);
119119
CASE_MOVE_TRIVIALLY_COPYABLE_TYPE(TypeTag::BOOL, as_bool);
120-
// Tensor adjacent types
121-
CASE_MOVE_MOVEABLE_TYPE(
122-
TypeTag::STAGING, api::StagingBuffer, as_staging, StagingBuffer);
120+
// Tensor adjacent type
123121
CASE_MOVE_MOVEABLE_TYPE(
124122
TypeTag::TENSORREF, TensorRef, as_tensorref, TensorRef);
125123
// Scalar lists
@@ -134,9 +132,12 @@ struct Value final {
134132
TypeTag::VALUELIST, std::vector<ValueRef>, as_value_list, vector);
135133
CASE_MOVE_MOVEABLE_TYPE(
136134
TypeTag::STRING, std::string, as_string, basic_string);
137-
CASE_MOVE_MOVEABLE_TYPE(TypeTag::SYMINT, SymInt, as_symint, SymInt);
138135
// Tensor type
139136
CASE_MOVE_UNIQUE_PTR_TYPE(TypeTag::TENSOR, as_tensor);
137+
// Small tensor adjacent types
138+
CASE_MOVE_UNIQUE_PTR_TYPE(TypeTag::STAGING, as_staging);
139+
// Large tensor adjacent types
140+
CASE_MOVE_UNIQUE_PTR_TYPE(TypeTag::SYMINT, as_symint);
140141

141142
case TypeTag::NONE:
142143
clearToNone();
@@ -163,9 +164,6 @@ struct Value final {
163164

164165
~Value() {
165166
switch (tag) {
166-
case TypeTag::STAGING:
167-
payload.as_staging.~StagingBuffer();
168-
break;
169167
case TypeTag::TENSORREF:
170168
payload.as_tensorref.~TensorRef();
171169
break;
@@ -184,8 +182,11 @@ struct Value final {
184182
case TypeTag::STRING:
185183
payload.as_string.~basic_string();
186184
break;
185+
case TypeTag::STAGING:
186+
payload.as_staging.reset();
187+
break;
187188
case TypeTag::SYMINT:
188-
payload.as_symint.~SymInt();
189+
payload.as_symint.reset();
189190
break;
190191
case TypeTag::TENSOR:
191192
payload.as_tensor.reset();
@@ -258,12 +259,6 @@ struct Value final {
258259
return payload.member_name; \
259260
}
260261

261-
SUPPORT_TRIVIALLY_MOVEABLE_TYPE(
262-
api::StagingBuffer,
263-
Staging,
264-
TypeTag::STAGING,
265-
as_staging);
266-
267262
SUPPORT_TRIVIALLY_MOVEABLE_TYPE(
268263
TensorRef,
269264
TensorRef,
@@ -300,8 +295,6 @@ struct Value final {
300295
TypeTag::STRING,
301296
as_string);
302297

303-
SUPPORT_TRIVIALLY_MOVEABLE_TYPE(SymInt, SymInt, TypeTag::SYMINT, as_symint);
304-
305298
#undef SUPPORT_TRIVIALLY_MOVEABLE_TYPE
306299

307300
#define SUPPORT_UNIQUE_PTR_TYPE(type, type_name, type_tag, member_name) \
@@ -330,6 +323,14 @@ struct Value final {
330323

331324
SUPPORT_UNIQUE_PTR_TYPE(api::vTensor, Tensor, TypeTag::TENSOR, as_tensor);
332325

326+
SUPPORT_UNIQUE_PTR_TYPE(
327+
api::StagingBuffer,
328+
Staging,
329+
TypeTag::STAGING,
330+
as_staging);
331+
332+
SUPPORT_UNIQUE_PTR_TYPE(SymInt, SymInt, TypeTag::SYMINT, as_symint);
333+
333334
#undef SUPPORT_UNIQUE_PTR_TYPE
334335

335336
private:

backends/vulkan/test/vulkan_compute_api_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,8 +1087,8 @@ TEST_F(VulkanComputeAPITest, print_object_sizes) {
10871087

10881088
// Current known size on 64 bit system: 1040 B
10891089
EXPECT_TRUE(sizeof(vTensor) < 1200);
1090-
// Current known size on 64 bit system: 120 B
1091-
EXPECT_TRUE(sizeof(Value) < 128);
1090+
// Current known size on 64 bit system: 48 B
1091+
EXPECT_TRUE(sizeof(Value) < 56);
10921092
// Current known size on 64 bit system: 120 B
10931093
EXPECT_TRUE(sizeof(StagingBuffer) < 500);
10941094
// Current known size on 64 bit system: 384 B

0 commit comments

Comments
 (0)