Skip to content

Commit 070375e

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: 256271410 @exported-using-ghexport Differential Revision: [D66677759](https://our.internmc.facebook.com/intern/diff/D66677759/)
1 parent cf7078e commit 070375e

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

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

Lines changed: 17 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,10 @@ 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+
CASE_MOVE_UNIQUE_PTR_TYPE(TypeTag::STAGING, as_staging);
138+
CASE_MOVE_UNIQUE_PTR_TYPE(TypeTag::SYMINT, as_symint);
140139

141140
case TypeTag::NONE:
142141
clearToNone();
@@ -163,9 +162,6 @@ struct Value final {
163162

164163
~Value() {
165164
switch (tag) {
166-
case TypeTag::STAGING:
167-
payload.as_staging.~StagingBuffer();
168-
break;
169165
case TypeTag::TENSORREF:
170166
payload.as_tensorref.~TensorRef();
171167
break;
@@ -184,8 +180,11 @@ struct Value final {
184180
case TypeTag::STRING:
185181
payload.as_string.~basic_string();
186182
break;
183+
case TypeTag::STAGING:
184+
payload.as_staging.reset();
185+
break;
187186
case TypeTag::SYMINT:
188-
payload.as_symint.~SymInt();
187+
payload.as_symint.reset();
189188
break;
190189
case TypeTag::TENSOR:
191190
payload.as_tensor.reset();
@@ -258,12 +257,6 @@ struct Value final {
258257
return payload.member_name; \
259258
}
260259

261-
SUPPORT_TRIVIALLY_MOVEABLE_TYPE(
262-
api::StagingBuffer,
263-
Staging,
264-
TypeTag::STAGING,
265-
as_staging);
266-
267260
SUPPORT_TRIVIALLY_MOVEABLE_TYPE(
268261
TensorRef,
269262
TensorRef,
@@ -300,8 +293,6 @@ struct Value final {
300293
TypeTag::STRING,
301294
as_string);
302295

303-
SUPPORT_TRIVIALLY_MOVEABLE_TYPE(SymInt, SymInt, TypeTag::SYMINT, as_symint);
304-
305296
#undef SUPPORT_TRIVIALLY_MOVEABLE_TYPE
306297

307298
#define SUPPORT_UNIQUE_PTR_TYPE(type, type_name, type_tag, member_name) \
@@ -330,6 +321,14 @@ struct Value final {
330321

331322
SUPPORT_UNIQUE_PTR_TYPE(api::vTensor, Tensor, TypeTag::TENSOR, as_tensor);
332323

324+
SUPPORT_UNIQUE_PTR_TYPE(
325+
api::StagingBuffer,
326+
Staging,
327+
TypeTag::STAGING,
328+
as_staging);
329+
330+
SUPPORT_UNIQUE_PTR_TYPE(SymInt, SymInt, TypeTag::SYMINT, as_symint);
331+
333332
#undef SUPPORT_UNIQUE_PTR_TYPE
334333

335334
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: 80 B
1091-
EXPECT_TRUE(sizeof(Value) < 88);
1090+
// Current known size on 64 bit system: 32 B
1091+
EXPECT_TRUE(sizeof(Value) < 40);
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)