parent
3ae3c8dfb5
commit
c3d2af7501
@ -83,16 +83,19 @@ TensorDesc::TensorDesc() {
|
|||||||
|
|
||||||
void TensorDesc::setDims(const SizeVector& dims) {
|
void TensorDesc::setDims(const SizeVector& dims) {
|
||||||
if (layout == Layout::BLOCKED) {
|
if (layout == Layout::BLOCKED) {
|
||||||
auto newDims = blockingDesc.getBlockDims();
|
|
||||||
auto newOrder = blockingDesc.getOrder();
|
auto newOrder = blockingDesc.getOrder();
|
||||||
if (newDims.empty())
|
auto oldDims = blockingDesc.getBlockDims();
|
||||||
newDims = dims;
|
|
||||||
|
// {0} shape is fully dynamic shape with default (BLOCKED) layout, order is dummy
|
||||||
|
if (oldDims.size() == 1 && oldDims[0] == 0)
|
||||||
|
newOrder.resize(0);
|
||||||
|
|
||||||
if (newOrder.empty()) {
|
if (newOrder.empty()) {
|
||||||
for (size_t i = 0; i < newDims.size(); i++) {
|
for (size_t i = 0; i < dims.size(); i++) {
|
||||||
newOrder.push_back(i);
|
newOrder.push_back(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
blockingDesc = BlockingDesc(newDims, newOrder);
|
blockingDesc = BlockingDesc(dims, newOrder);
|
||||||
} else {
|
} else {
|
||||||
if (layout == Layout::SCALAR && (dims.size() > 1 || (dims.size() == 1 && dims[0] != 1)))
|
if (layout == Layout::SCALAR && (dims.size() > 1 || (dims.size() == 1 && dims[0] != 1)))
|
||||||
IE_THROW() << "Cannot set dimensions for SCALAR layout!";
|
IE_THROW() << "Cannot set dimensions for SCALAR layout!";
|
||||||
@ -391,7 +394,8 @@ BlockingDesc::BlockingDesc(const SizeVector& dims, Layout layout) : offsetPaddin
|
|||||||
|
|
||||||
void BlockingDesc::fillDesc(const SizeVector& blocked_dims, const SizeVector& order) {
|
void BlockingDesc::fillDesc(const SizeVector& blocked_dims, const SizeVector& order) {
|
||||||
if (order.size() != blocked_dims.size())
|
if (order.size() != blocked_dims.size())
|
||||||
IE_THROW() << "Cannot fill descriptor. Size of dimensions and order vector don't match.";
|
IE_THROW() << "Cannot fill descriptor. Size of dimensions (" << blocked_dims.size() << ") and order ("
|
||||||
|
<< order.size() << ") vector don't match.";
|
||||||
if (blocked_dims.empty() || order.empty())
|
if (blocked_dims.empty() || order.empty())
|
||||||
IE_THROW() << "Cannot fill descriptor. Dimensions and order vector are empty.";
|
IE_THROW() << "Cannot fill descriptor. Dimensions and order vector are empty.";
|
||||||
this->order = order;
|
this->order = order;
|
||||||
|
@ -85,11 +85,28 @@ TEST_F(TensorDescTests, CompareNDHWCandNCDHWLayouts) {
|
|||||||
|
|
||||||
TEST_F(TensorDescTests, SetLayout) {
|
TEST_F(TensorDescTests, SetLayout) {
|
||||||
TensorDesc descNCHW(Precision::FP32, {1, 2, 3, 4}, Layout::NCHW);
|
TensorDesc descNCHW(Precision::FP32, {1, 2, 3, 4}, Layout::NCHW);
|
||||||
|
|
||||||
TensorDesc decsNHWC = descNCHW;
|
TensorDesc decsNHWC = descNCHW;
|
||||||
decsNHWC.setLayout(Layout::NHWC);
|
decsNHWC.setLayout(Layout::NHWC);
|
||||||
|
|
||||||
TensorDesc refNHWC(descNCHW.getPrecision(), descNCHW.getDims(), Layout::NHWC);
|
TensorDesc refNHWC(descNCHW.getPrecision(), descNCHW.getDims(), Layout::NHWC);
|
||||||
|
|
||||||
ASSERT_EQ(decsNHWC, refNHWC);
|
ASSERT_EQ(decsNHWC, refNHWC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(TensorDescTests, setDimsForBLOCKED) {
|
||||||
|
TensorDesc desc(Precision::FP32, {1, 2, 3, 4, 5, 6}, Layout::BLOCKED);
|
||||||
|
SizeVector newDims {7, 7, 7, 7, 7, 7};
|
||||||
|
desc.setDims(newDims);
|
||||||
|
EXPECT_EQ(desc.getDims(), newDims);
|
||||||
|
EXPECT_EQ(desc.getBlockingDesc().getBlockDims(), newDims);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TensorDescTests, setDimsForNHWC) {
|
||||||
|
TensorDesc desc(Precision::FP32, {1, 2, 3, 4}, Layout::NHWC);
|
||||||
|
auto refOrder = desc.getBlockingDesc().getOrder();
|
||||||
|
SizeVector newDims {7, 7, 7, 7};
|
||||||
|
desc.setDims(newDims);
|
||||||
|
EXPECT_EQ(desc.getDims(), newDims);
|
||||||
|
EXPECT_EQ(desc.getLayout(), Layout::NHWC);
|
||||||
|
EXPECT_EQ(desc.getBlockingDesc().getBlockDims(), newDims);
|
||||||
|
EXPECT_EQ(desc.getBlockingDesc().getOrder(), refOrder);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user