Skip to content

Commit 153afe3

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.
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. Differential Revision: [D66677759](https://our.internmc.facebook.com/intern/diff/D66677759/) ghstack-source-id: 256135680 Pull Request resolved: #7152
1 parent 8eff3e3 commit 153afe3

File tree

1 file changed

+19
-20
lines changed
  • backends/vulkan/runtime/graph/containers

1 file changed

+19
-20
lines changed

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

Lines changed: 19 additions & 20 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,9 +180,6 @@ struct Value final {
184180
case TypeTag::STRING:
185181
payload.as_string.~basic_string();
186182
break;
187-
case TypeTag::SYMINT:
188-
payload.as_symint.~SymInt();
189-
break;
190183
// Manually list out the types so that if a type here is added later and
191184
// not handled the compiler can catch it.
192185
case TypeTag::NONE:
@@ -197,6 +190,12 @@ struct Value final {
197190
case TypeTag::TENSOR:
198191
payload.as_tensor.reset();
199192
break;
193+
case TypeTag::STAGING:
194+
payload.as_staging.reset();
195+
break;
196+
case TypeTag::SYMINT:
197+
payload.as_symint.reset();
198+
break;
200199
}
201200
}
202201

@@ -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:

0 commit comments

Comments
 (0)