From 92a29a3e866b03c4e1031d247048291a75f17051 Mon Sep 17 00:00:00 2001 From: "Milczarek, Slawomir" Date: Fri, 31 May 2019 00:35:24 +0200 Subject: [PATCH] OsAgnosticMemoryManager to call freeMemory on AubManager for hostPtr Related-To: NEO-3231 Change-Id: I83d5c9036d7f5531c1e7290058b8e2635e42ec18 Signed-off-by: Milczarek, Slawomir --- .../os_agnostic_memory_manager.cpp | 10 +++++----- .../enqueue_copy_image_aub_tests.cpp | 5 ++++- .../enqueue_fill_image_aub_tests.cpp | 5 ++++- .../enqueue_map_buffer_aub_tests.cpp | 5 ++++- .../enqueue_map_image_aub_tests.cpp | 5 ++++- .../enqueue_read_buffer_aub_tests.cpp | 10 ++++++++-- .../enqueue_read_buffer_rect_aub_tests.cpp | 16 +++++++++------- .../enqueue_read_image_aub_tests.cpp | 8 +++++++- .../enqueue_read_write_image_aub_fixture.h | 11 ++++++----- .../enqueue_write_image_aub_tests.cpp | 6 +++++- .../aub_tests/mem_obj/create_image_aub_tests.cpp | 11 ++++++++--- 11 files changed, 64 insertions(+), 28 deletions(-) diff --git a/runtime/memory_manager/os_agnostic_memory_manager.cpp b/runtime/memory_manager/os_agnostic_memory_manager.cpp index 342a62bf85..4eadd8a684 100644 --- a/runtime/memory_manager/os_agnostic_memory_manager.cpp +++ b/runtime/memory_manager/os_agnostic_memory_manager.cpp @@ -185,6 +185,11 @@ void OsAgnosticMemoryManager::freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllo return; } + auto aubCenter = executionEnvironment.aubCenter.get(); + if (aubCenter && aubCenter->getAubManager()) { + aubCenter->getAubManager()->freeMemory(gfxAllocation->getGpuAddress(), gfxAllocation->getUnderlyingBufferSize()); + } + if (gfxAllocation->fragmentsStorage.fragmentCount) { cleanGraphicsMemoryCreatedFromHostPtr(gfxAllocation); delete gfxAllocation; @@ -201,11 +206,6 @@ void OsAgnosticMemoryManager::freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllo releaseReservedCpuAddressRange(gfxAllocation->getReservedAddressPtr(), gfxAllocation->getReservedAddressSize()); } - auto aubCenter = executionEnvironment.aubCenter.get(); - if (aubCenter && aubCenter->getAubManager()) { - aubCenter->getAubManager()->freeMemory(gfxAllocation->getGpuAddress(), gfxAllocation->getUnderlyingBufferSize()); - } - delete gfxAllocation; } diff --git a/unit_tests/aub_tests/command_queue/enqueue_copy_image_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_copy_image_aub_tests.cpp index bfcc9e0dd5..916c314ad9 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_copy_image_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_copy_image_aub_tests.cpp @@ -124,7 +124,10 @@ HWTEST_P(AUBCopyImage, simple) { size_t imgOrigin[] = {0, 0, 0}; size_t imgRegion[] = {imageDesc.image_width, imageDesc.image_height, imageDesc.image_depth}; - pCmdQ->enqueueReadImage(dstImage, CL_TRUE, imgOrigin, imgRegion, 0, 0, dstOutMemory, nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadImage(dstImage, CL_FALSE, imgOrigin, imgRegion, 0, 0, dstOutMemory, nullptr, 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); // Offset the source memory diff --git a/unit_tests/aub_tests/command_queue/enqueue_fill_image_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_fill_image_aub_tests.cpp index 3d79c2aa43..904b2d7f63 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_fill_image_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_fill_image_aub_tests.cpp @@ -207,7 +207,10 @@ HWTEST_P(AubFillImage, simple) { size_t imgRegion[] = {testWidth, testHeight, testDepth}; auto dstMemory = new uint8_t[sizeMemory]; - pCmdQ->enqueueReadImage(image, CL_TRUE, imgOrigin, imgRegion, 0, 0, dstMemory, nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadImage(image, CL_FALSE, imgOrigin, imgRegion, 0, 0, dstMemory, nullptr, 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); size_t slicePitch = image->getHostPtrSlicePitch(); diff --git a/unit_tests/aub_tests/command_queue/enqueue_map_buffer_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_map_buffer_aub_tests.cpp index 1664f97ede..7b11e3be3f 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_map_buffer_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_map_buffer_aub_tests.cpp @@ -68,7 +68,10 @@ HWTEST_F(AUBMapBuffer, MapUpdateUnmapVerify) { std::unique_ptr readMemory(new uint8_t[bufferSize]); buffer->forceDisallowCPUCopy = true; - retVal = pCmdQ->enqueueReadBuffer(buffer.get(), CL_TRUE, 0, bufferSize, readMemory.get(), nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadBuffer(buffer.get(), CL_FALSE, 0, bufferSize, readMemory.get(), nullptr, 0, nullptr, nullptr); + ASSERT_EQ(CL_SUCCESS, retVal); + + retVal = pCmdQ->flush(); ASSERT_EQ(CL_SUCCESS, retVal); for (size_t i = 0; i < bufferSize; i++) { diff --git a/unit_tests/aub_tests/command_queue/enqueue_map_image_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_map_image_aub_tests.cpp index 05ab2b128d..2a5a9e709c 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_map_image_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_map_image_aub_tests.cpp @@ -182,7 +182,10 @@ HWTEST_P(AUBMapImage, MapUpdateUnmapVerify) { uint8_t *readMemory = new uint8_t[srcImage->getSize()]; size_t imgOrigin[] = {0, 0, 0}; size_t imgRegion[] = {testWidth, testHeight, testDepth}; - retVal = pCmdQ->enqueueReadImage(srcImage, CL_TRUE, imgOrigin, imgRegion, inputRowPitch, inputSlicePitch, readMemory, nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadImage(srcImage, CL_FALSE, imgOrigin, imgRegion, inputRowPitch, inputSlicePitch, readMemory, nullptr, 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); srcMemoryStart = srcMemory; diff --git a/unit_tests/aub_tests/command_queue/enqueue_read_buffer_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_read_buffer_aub_tests.cpp index 07b12358cb..3edddc3e18 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_read_buffer_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_read_buffer_aub_tests.cpp @@ -136,7 +136,7 @@ HWTEST_F(AUBReadBuffer, reserveCanonicalGpuAddress) { srcBuffer->forceDisallowCPUCopy = true; auto retVal = pCmdQ->enqueueReadBuffer(srcBuffer.get(), - CL_TRUE, + CL_FALSE, 0, sizeof(dstMemory), dstMemory, @@ -146,6 +146,9 @@ HWTEST_F(AUBReadBuffer, reserveCanonicalGpuAddress) { nullptr); EXPECT_EQ(CL_SUCCESS, retVal); + retVal = pCmdQ->flush(); + EXPECT_EQ(CL_SUCCESS, retVal); + GraphicsAllocation *dstAllocation = createResidentAllocationAndStoreItInCsr(dstMemory, sizeof(dstMemory)); cl_float *dstGpuAddress = reinterpret_cast(dstAllocation->getGpuAddress()); @@ -191,7 +194,7 @@ struct AUBReadBufferUnaligned // Do unaligned read retVal = pCmdQ->enqueueReadBuffer( buffer.get(), - CL_TRUE, + CL_FALSE, offset, size, ptrOffset(dstMemory, offset), @@ -201,6 +204,9 @@ struct AUBReadBufferUnaligned nullptr); EXPECT_EQ(CL_SUCCESS, retVal); + retVal = pCmdQ->flush(); + EXPECT_EQ(CL_SUCCESS, retVal); + // Check the memory AUBCommandStreamFixture::expectMemory(ptrOffset(dstMemoryGPUPtr, offset), ptrOffset(srcMemory, offset), size); } diff --git a/unit_tests/aub_tests/command_queue/enqueue_read_buffer_rect_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_read_buffer_rect_aub_tests.cpp index ffe8734175..e61a03923f 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_read_buffer_rect_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_read_buffer_rect_aub_tests.cpp @@ -57,15 +57,15 @@ HWTEST_P(AUBReadBufferRect, simple3D) { memset(destMemory, 0x00, bufferSize); auto retVal = CL_INVALID_VALUE; - auto srcBuffer = Buffer::create( + auto srcBuffer = std::unique_ptr(Buffer::create( &context, CL_MEM_USE_HOST_PTR, bufferSize, srcMemory, - retVal); + retVal)); ASSERT_NE(nullptr, srcBuffer); - cl_bool blockingRead = CL_TRUE; + cl_bool blockingRead = CL_FALSE; createResidentAllocationAndStoreItInCsr(destMemory, bufferSize); @@ -74,7 +74,7 @@ HWTEST_P(AUBReadBufferRect, simple3D) { size_t region[] = {rowPitch, rowPitch, 1}; retVal = pCmdQ->enqueueReadBufferRect( - srcBuffer, + srcBuffer.get(), blockingRead, bufferOrigin, hostOrigin, @@ -87,9 +87,9 @@ HWTEST_P(AUBReadBufferRect, simple3D) { 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); - delete srcBuffer; - + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); char *ptr = new char[slicePitch]; @@ -151,7 +151,7 @@ struct AUBReadBufferRectUnaligned GraphicsAllocation *allocation = createResidentAllocationAndStoreItInCsr(dstMemory, bufferSize); auto dstMemoryGPUPtr = reinterpret_cast(allocation->getGpuAddress()); - cl_bool blockingRead = CL_TRUE; + cl_bool blockingRead = CL_FALSE; size_t rowPitch = bufferSize / 4; size_t slicePitch = 4 * rowPitch; @@ -173,7 +173,9 @@ struct AUBReadBufferRectUnaligned 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); AUBCommandStreamFixture::expectMemory(dstMemoryGPUPtr, referenceMemory, offset); diff --git a/unit_tests/aub_tests/command_queue/enqueue_read_image_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_read_image_aub_tests.cpp index 2e310fa10c..0086220918 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_read_image_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_read_image_aub_tests.cpp @@ -158,7 +158,7 @@ HWTEST_P(AUBReadImage, simpleUnalignedMemory) { retVal = pCmdQ->enqueueReadImage( srcImage, - CL_TRUE, + CL_FALSE, origin, region, inputRowPitch, @@ -170,6 +170,9 @@ HWTEST_P(AUBReadImage, simpleUnalignedMemory) { nullptr); EXPECT_EQ(CL_SUCCESS, retVal); + retVal = pCmdQ->flush(); + EXPECT_EQ(CL_SUCCESS, retVal); + auto imageMemory = srcMemory; if (!srcImage->isMemObjZeroCopy() && !srcImage->allowTiling()) { @@ -208,6 +211,9 @@ HWTEST_P(AUBReadImage, simpleUnalignedMemory) { ptrOffset(dstMemoryUnaligned, testWidth * testHeight * elementSize); } + retVal = pCmdQ->finish(true); //FixMe - not all test cases verified with expects + EXPECT_EQ(CL_SUCCESS, retVal); + alignedFree(dstMemoryAligned); delete[] srcMemory; } diff --git a/unit_tests/aub_tests/command_queue/enqueue_read_write_image_aub_fixture.h b/unit_tests/aub_tests/command_queue/enqueue_read_write_image_aub_fixture.h index bbf3f1b8b7..199935da16 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_read_write_image_aub_fixture.h +++ b/unit_tests/aub_tests/command_queue/enqueue_read_write_image_aub_fixture.h @@ -72,9 +72,6 @@ struct AUBImageUnaligned imageDesc.num_samples = 0; imageDesc.mem_object = NULL; - auto graphicsAllocation = createResidentAllocationAndStoreItInCsr(dstMemory, bufferSize); - auto dstMemoryGPUPtr = reinterpret_cast(graphicsAllocation->getGpuAddress()); - cl_mem_flags flags = CL_MEM_USE_HOST_PTR | CL_MEM_READ_WRITE; auto surfaceFormat = Image::getSurfaceFormatFromTable(flags, &imageFormat); auto retVal = CL_INVALID_VALUE; @@ -89,6 +86,9 @@ struct AUBImageUnaligned ASSERT_NE(nullptr, image); EXPECT_FALSE(image->isMemObjZeroCopy()); + auto graphicsAllocation = createResidentAllocationAndStoreItInCsr(dstMemory, bufferSize); + auto dstMemoryGPUPtr = reinterpret_cast(graphicsAllocation->getGpuAddress()); + const size_t origin[3] = {0, 1, 0}; const size_t region[3] = {size, 1, 1}; @@ -97,7 +97,7 @@ struct AUBImageUnaligned retVal = pCmdQ->enqueueReadImage( image.get(), - CL_TRUE, + CL_FALSE, origin, region, inputRowPitch, @@ -109,7 +109,8 @@ struct AUBImageUnaligned nullptr); EXPECT_EQ(CL_SUCCESS, retVal); - pCmdQ->finish(true); + retVal = pCmdQ->flush(); + EXPECT_EQ(CL_SUCCESS, retVal); AUBCommandStreamFixture::expectMemory(dstMemoryGPUPtr, referenceMemory, offset); AUBCommandStreamFixture::expectMemory(ptrOffset(dstMemoryGPUPtr, offset), &imageMemory[inputRowPitch * origin[1] * pixelSize], size * pixelSize); diff --git a/unit_tests/aub_tests/command_queue/enqueue_write_image_aub_tests.cpp b/unit_tests/aub_tests/command_queue/enqueue_write_image_aub_tests.cpp index ec7f528924..86c552d35f 100644 --- a/unit_tests/aub_tests/command_queue/enqueue_write_image_aub_tests.cpp +++ b/unit_tests/aub_tests/command_queue/enqueue_write_image_aub_tests.cpp @@ -169,7 +169,11 @@ HWTEST_P(AUBWriteImage, simpleUnalignedMemory) { auto readMemory = new uint8_t[dstImage->getSize()]; size_t imgOrigin[] = {0, 0, 0}; size_t imgRegion[] = {testWidth, testHeight, testDepth}; - pCmdQ->enqueueReadImage(dstImage, CL_TRUE, imgOrigin, imgRegion, 0, 0, readMemory, nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadImage(dstImage, CL_FALSE, imgOrigin, imgRegion, 0, 0, readMemory, nullptr, 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + + retVal = pCmdQ->flush(); + EXPECT_EQ(CL_SUCCESS, retVal); auto pDstMemory = readMemory; auto pSrc = pSrcMemory; diff --git a/unit_tests/aub_tests/mem_obj/create_image_aub_tests.cpp b/unit_tests/aub_tests/mem_obj/create_image_aub_tests.cpp index d78e3a5b6a..9e7089a6ea 100644 --- a/unit_tests/aub_tests/mem_obj/create_image_aub_tests.cpp +++ b/unit_tests/aub_tests/mem_obj/create_image_aub_tests.cpp @@ -242,7 +242,9 @@ HWTEST_P(AUBCreateImageHostPtr, imageWithDoubledRowPitchThatIsCreatedWithCopyHos readMemory = new uint8_t[testImageDimensions * testImageDimensions * elementSize * 4]; size_t imgOrigin[] = {0, 0, 0}; size_t imgRegion[] = {imageDesc.image_width, imageDesc.image_height, imageDesc.image_depth ? imageDesc.image_depth : 1}; - retVal = pCmdQ->enqueueReadImage(image, CL_TRUE, imgOrigin, imgRegion, 0, 0, readMemory, nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadImage(image, CL_FALSE, imgOrigin, imgRegion, 0, 0, readMemory, nullptr, 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); imageStorage = readMemory; } @@ -312,7 +314,7 @@ HWTEST_P(AUBCreateImageHostPtr, imageWithRowPitchCreatedWithUseHostPtrFlagCopied size_t imageSlicePitch = 0; auto ptr = pCmdQ->enqueueMapImage( image, - true, + false, mapFlags, origin, region, @@ -327,6 +329,7 @@ HWTEST_P(AUBCreateImageHostPtr, imageWithRowPitchCreatedWithUseHostPtrFlagCopied } else { EXPECT_NE(image->getCpuAddress(), ptr); } + pCmdQ->flush(); size_t imageRowPitchRef = 0; image->getImageInfo(CL_IMAGE_ROW_PITCH, sizeof(imageRowPitchRef), &imageRowPitchRef, nullptr); @@ -403,7 +406,9 @@ HWTEST_F(AUBCreateImage, image3DCreatedWithDoubledSlicePitchWhenQueriedForDataRe readMemory = new uint8_t[imageSize]; size_t imgOrigin[] = {0, 0, 0}; size_t imgRegion[] = {imageDesc.image_width, imageDesc.image_height, imageDesc.image_depth}; - retVal = pCmdQ->enqueueReadImage(image, CL_TRUE, imgOrigin, imgRegion, 0, computedSlicePitch, readMemory, nullptr, 0, nullptr, nullptr); + retVal = pCmdQ->enqueueReadImage(image, CL_FALSE, imgOrigin, imgRegion, 0, computedSlicePitch, readMemory, nullptr, 0, nullptr, nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + retVal = pCmdQ->flush(); EXPECT_EQ(CL_SUCCESS, retVal); imageStorage = readMemory; }