Skip to content

Commit 593da70

Browse files
authored
Skip checking for dim order and strindes if those are not provided explicitly.
Differential Revision: D60854859 Pull Request resolved: #4570
1 parent 98b8ae1 commit 593da70

File tree

2 files changed

+91
-10
lines changed

2 files changed

+91
-10
lines changed

runtime/core/portable_type/tensor_impl.cpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,11 @@ Error TensorImpl::internal_resize_contiguous(ArrayRef<SizesType> new_sizes) {
100100
"Attempted to resize a bounded tensor with capacity of %zu elements to %zu elements.",
101101
new_numel,
102102
numel_bound_);
103-
ET_CHECK_OR_RETURN_ERROR(
104-
strides_ != nullptr,
105-
Internal,
106-
"Strides cannot be nullptr for resize");
107-
ET_CHECK_OR_RETURN_ERROR(
108-
dim_order_ != nullptr,
109-
Internal,
110-
"Dim order cannot be nullptr for resize");
111-
ET_CHECK_OK_OR_RETURN_ERROR(
112-
dim_order_to_stride(new_sizes.data(), dim_order_, dim_, strides_));
113103

104+
if (strides_ && dim_order_) {
105+
ET_CHECK_OK_OR_RETURN_ERROR(
106+
dim_order_to_stride(new_sizes.data(), dim_order_, dim_, strides_));
107+
}
114108
numel_ = new_numel;
115109
std::copy(new_sizes.begin(), new_sizes.end(), sizes_);
116110
}

runtime/core/portable_type/test/tensor_impl_test.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,93 @@ TEST_F(TensorImplTest, TestSetSizesContigUnbounded) {
267267
EXPECT_NE(err, Error::Ok);
268268
}
269269

270+
TEST_F(TensorImplTest, TestDynamicTensorNoStridesDimOrder) {
271+
SizesType sizes[3] = {2, 3, 4};
272+
float data[24] = {0};
273+
TensorImpl t(
274+
ScalarType::Float,
275+
3,
276+
sizes,
277+
data,
278+
nullptr,
279+
nullptr,
280+
TensorShapeDynamism::DYNAMIC_BOUND);
281+
282+
EXPECT_EQ(t.dim(), 3);
283+
EXPECT_EQ(t.numel(), 24);
284+
EXPECT_EQ(t.nbytes(), 24 * sizeof(float));
285+
286+
SizesType new_sizes[3] = {3, 2, 4};
287+
Error err = resize_tensor_impl(&t, {new_sizes, 3});
288+
EXPECT_EQ(err, Error::Ok);
289+
EXPECT_EQ(t.dim(), 3);
290+
EXPECT_EQ(t.size(0), 3);
291+
EXPECT_EQ(t.size(1), 2);
292+
EXPECT_EQ(t.size(2), 4);
293+
EXPECT_EQ(t.numel(), 3 * 2 * 4);
294+
295+
const float* y = t.data<float>();
296+
EXPECT_EQ(y, data);
297+
}
298+
299+
TEST_F(TensorImplTest, TestDynamicTensorNoStridesDimOrderResizeDown) {
300+
SizesType sizes[3] = {4, 4, 4};
301+
float data[64] = {0};
302+
TensorImpl t(
303+
ScalarType::Float,
304+
3,
305+
sizes,
306+
data,
307+
nullptr,
308+
nullptr,
309+
TensorShapeDynamism::DYNAMIC_BOUND);
310+
311+
EXPECT_EQ(t.dim(), 3);
312+
EXPECT_EQ(t.numel(), 64);
313+
EXPECT_EQ(t.nbytes(), 64 * sizeof(float));
314+
315+
SizesType new_sizes[3] = {2, 2, 2};
316+
Error err = resize_tensor_impl(&t, {new_sizes, 3});
317+
EXPECT_EQ(err, Error::Ok);
318+
EXPECT_EQ(t.dim(), 3);
319+
EXPECT_EQ(t.size(0), 2);
320+
EXPECT_EQ(t.size(1), 2);
321+
EXPECT_EQ(t.size(2), 2);
322+
EXPECT_EQ(t.numel(), 2 * 2 * 2);
323+
324+
const float* y = t.data<float>();
325+
EXPECT_EQ(y, data);
326+
}
327+
328+
TEST_F(TensorImplTest, TestDynamicTensorNoStridesDimOrderResizeZeroDim) {
329+
SizesType sizes[3] = {4, 4, 4};
330+
float data[64] = {0};
331+
TensorImpl t(
332+
ScalarType::Float,
333+
3,
334+
sizes,
335+
data,
336+
nullptr,
337+
nullptr,
338+
TensorShapeDynamism::DYNAMIC_BOUND);
339+
340+
EXPECT_EQ(t.dim(), 3);
341+
EXPECT_EQ(t.numel(), 64);
342+
EXPECT_EQ(t.nbytes(), 64 * sizeof(float));
343+
344+
SizesType new_sizes[3] = {0, 4, 4};
345+
Error err = resize_tensor_impl(&t, {new_sizes, 3});
346+
EXPECT_EQ(err, Error::Ok);
347+
EXPECT_EQ(t.dim(), 3);
348+
EXPECT_EQ(t.size(0), 0);
349+
EXPECT_EQ(t.size(1), 4);
350+
EXPECT_EQ(t.size(2), 4);
351+
EXPECT_EQ(t.numel(), 0);
352+
353+
const float* y = t.data<float>();
354+
EXPECT_EQ(y, data);
355+
}
356+
270357
TEST_F(TensorImplTest, TestWriteRead) {
271358
SizesType sizes[1] = {1};
272359
DimOrderType dim_order[1] = {0};

0 commit comments

Comments
 (0)