From b6798b4ec81f0657935ac46e9a32ebf6084e584d Mon Sep 17 00:00:00 2001 From: Kirill Golikov Date: Wed, 29 May 2024 14:31:00 +0200 Subject: [PATCH] [NeoMLTest] Update the WindowBlobs tests (#1069) Signed-off-by: Kirill Golikov --- NeoML/test/src/DnnBlobTest.cpp | 57 +++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/NeoML/test/src/DnnBlobTest.cpp b/NeoML/test/src/DnnBlobTest.cpp index f93ed9fe7..b52c9b4af 100644 --- a/NeoML/test/src/DnnBlobTest.cpp +++ b/NeoML/test/src/DnnBlobTest.cpp @@ -25,30 +25,71 @@ using namespace NeoMLTest; TEST( CDnnBlobTest, InitWindowBlob ) { - MathEngine().CleanUp(); - MathEngine().ResetPeakMemoryUsage(); + IMathEngine& mathEngine = MathEngine(); + + mathEngine.CleanUp(); + mathEngine.ResetPeakMemoryUsage(); + + // 256 used, because for `reuse` mode minimal size of buffer is 256 + // To make a valid test for no matter what used mode in the MathEngine + const int blobSize = 256; + { + CPtr parent = CDnnBlob::CreateDataBlob( mathEngine, CT_Float, blobSize, 1, 1 ); + parent->Fill( -1.f ); + // Used the same blob size, instead 1 to use `CompareBlobs` without changes + CPtr window = CDnnBlob::CreateWindowBlob( parent, blobSize ); + + EXPECT_EQ( window->GetData().IsNull(), false ); // created + EXPECT_TRUE( CompareBlobs( *window, *parent ) ); // same data + EXPECT_EQ( window->GetData(), parent->GetData() ); // same pointers + // No more memory created, except the parent blob + EXPECT_EQ( mathEngine.GetCurrentMemoryUsage(), blobSize * sizeof( float ) ); + } + if( mathEngine.GetReuseMemoryMode() == true ) { + EXPECT_EQ( mathEngine.GetCurrentMemoryUsage(), blobSize * sizeof( float ) ); + EXPECT_EQ( mathEngine.GetCurrentMemoryUsage(), mathEngine.GetMemoryInPools() ); + } else { + EXPECT_EQ( mathEngine.GetCurrentMemoryUsage(), 0 ); + } + EXPECT_EQ( mathEngine.GetPeakMemoryUsage(), blobSize * sizeof( float ) ); + { - CPtr parent = CDnnBlob::CreateDataBlob( MathEngine(), CT_Float, 16, 1, 1 ); - CPtr window = CDnnBlob::CreateWindowBlob( parent ); + CPtr parent = CDnnBlob::CreateDataBlob( mathEngine, CT_Float, blobSize, 1, 1 ); + CPtr shifted_window = CDnnBlob::CreateWindowBlob( parent, 1 ); + + // Set different data + for( int i = 0; i < parent->GetDataSize(); ++i ) { + parent->GetData().SetValueAt( i, 1.f + i ); + } - EXPECT_TRUE( window->GetData().IsNull() == false ); + // Check for exact data and pointers + for( int i = 0; i < parent->GetDesc().BatchLength(); ++i ) { + shifted_window->SetParentPos( i ); + EXPECT_EQ( shifted_window->GetData(), parent->GetObjectData( i ) ); // same pointers + EXPECT_EQ( shifted_window->GetData().GetValue(), parent->GetObjectData( i ).GetValue() ); // same data + } + EXPECT_EQ( mathEngine.GetCurrentMemoryUsage(), blobSize * sizeof( float ) ); } - EXPECT_TRUE( MathEngine().GetCurrentMemoryUsage() == 0 ); - EXPECT_EQ( MathEngine().GetPeakMemoryUsage(), 16 * sizeof( float ) ); } TEST( CDnnBlobTest, BufferTest ) { + CPtr check = CDnnBlob::CreateDataBlob( MathEngine(), CT_Float, 16, 1, 1 ); + check->Clear(); // zeroes + CPtr blob = CDnnBlob::CreateDataBlob( MathEngine(), CT_Float, 16, 1, 1 ); EXPECT_FALSE( blob->GetData().IsNull() ); + blob->Fill( -1.f ); // some data CDnnBlobBuffer buffer( *blob, TDnnBlobBufferAccess::Write ); EXPECT_NE( nullptr, buffer.Ptr() ); - ::memset( buffer, 0, buffer.Size() * sizeof( float ) ); + ::memset( buffer, 0, buffer.Size() * sizeof( float ) ); // zeroes EXPECT_FALSE( buffer.IsClosed() ); buffer.Close(); EXPECT_TRUE( buffer.IsClosed() ); + + EXPECT_TRUE( CompareBlobs( *check, *blob ) ); // same data } //---------------------------------------------------------------------------------------------------------------------