Skip to content

Commit dc85f33

Browse files
fix: Disallow USM compression on peer access
Related-To: NEO-15427 Signed-off-by: Vysochyn, Illia <illia.vysochyn@intel.com>
1 parent 91fe2ec commit dc85f33

24 files changed

+111
-0
lines changed

shared/source/memory_manager/unified_memory_manager.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "shared/source/os_interface/os_context.h"
2727
#include "shared/source/os_interface/product_helper.h"
2828
#include "shared/source/page_fault_manager/cpu_page_fault_manager.h"
29+
#include "shared/source/release_helper/release_helper.h"
2930
namespace NEO {
3031

3132
uint32_t SVMAllocsManager::UnifiedMemoryProperties::getRootDeviceIndex() const {
@@ -506,6 +507,14 @@ void *SVMAllocsManager::createUnifiedMemoryAllocation(size_t size,
506507
bool compressionEnabled = false;
507508
AllocationType allocationType = getGraphicsAllocationTypeAndCompressionPreference(memoryProperties, compressionEnabled);
508509

510+
if (memoryProperties.device) {
511+
auto *releaseHelper = memoryProperties.device->getReleaseHelper();
512+
const bool peerAccess = memoryProperties.device->hasAnyPeerAccess().value_or(false);
513+
if (peerAccess && !releaseHelper->isUsmCompressionSupportedOnPeerAccess()) {
514+
compressionEnabled = false;
515+
}
516+
}
517+
509518
bool multiStorageAllocation = (deviceBitfield.count() > 1);
510519

511520
AllocationProperties unifiedMemoryProperties{rootDeviceIndex,

shared/source/release_helper/release_helper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class ReleaseHelper {
6868
virtual bool isPostImageWriteFlushRequired() const = 0;
6969
virtual uint32_t adjustMaxThreadsPerEuCount(uint32_t maxThreadsPerEuCount, uint32_t grfCount) const = 0;
7070
virtual bool shouldQueryPeerAccess() const = 0;
71+
virtual bool isUsmCompressionSupportedOnPeerAccess() const = 0;
7172
virtual bool isSingleDispatchRequiredForMultiCCS() const = 0;
7273
virtual bool isStateCacheInvalidationWaRequired() const = 0;
7374

@@ -117,6 +118,7 @@ class ReleaseHelperHw : public ReleaseHelper {
117118
bool isPostImageWriteFlushRequired() const override;
118119
uint32_t adjustMaxThreadsPerEuCount(uint32_t maxThreadsPerEuCount, uint32_t grfCount) const override;
119120
bool shouldQueryPeerAccess() const override;
121+
bool isUsmCompressionSupportedOnPeerAccess() const override;
120122
bool isSingleDispatchRequiredForMultiCCS() const override;
121123
bool isStateCacheInvalidationWaRequired() const override;
122124

shared/source/release_helper/release_helper_2001.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ bool ReleaseHelperHw<release>::shouldQueryPeerAccess() const {
5454
return true;
5555
}
5656

57+
template <>
58+
bool ReleaseHelperHw<release>::isUsmCompressionSupportedOnPeerAccess() const {
59+
return false;
60+
}
61+
5762
template <>
5863
bool ReleaseHelperHw<release>::isSingleDispatchRequiredForMultiCCS() const {
5964
return true;

shared/source/release_helper/release_helper_2002.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ bool ReleaseHelperHw<release>::shouldQueryPeerAccess() const {
5454
return true;
5555
}
5656

57+
template <>
58+
bool ReleaseHelperHw<release>::isUsmCompressionSupportedOnPeerAccess() const {
59+
return false;
60+
}
61+
5762
template <>
5863
bool ReleaseHelperHw<release>::isSingleDispatchRequiredForMultiCCS() const {
5964
return true;

shared/source/release_helper/release_helper_base.inl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@ bool ReleaseHelperHw<releaseType>::shouldQueryPeerAccess() const {
186186
return false;
187187
}
188188

189+
template <ReleaseType releaseType>
190+
bool ReleaseHelperHw<releaseType>::isUsmCompressionSupportedOnPeerAccess() const {
191+
return true;
192+
}
193+
189194
template <ReleaseType releaseType>
190195
bool ReleaseHelperHw<releaseType>::isSingleDispatchRequiredForMultiCCS() const {
191196
return false;

shared/test/common/mocks/mock_release_helper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class MockReleaseHelper : public ReleaseHelper {
4646
ADDMETHOD_CONST_NOBASE(adjustMaxThreadsPerEuCount, uint32_t, 8u, (uint32_t maxThreadsPerEuCount, uint32_t grfCount));
4747
ADDMETHOD_CONST_NOBASE_VOIDRETURN(adjustRTDispatchGlobals, (void *rtDispatchGlobals, uint32_t rtStacksPerDss, bool heaplessEnabled, uint32_t maxBvhLevels));
4848
ADDMETHOD_CONST_NOBASE(shouldQueryPeerAccess, bool, false, ());
49+
ADDMETHOD_CONST_NOBASE(isUsmCompressionSupportedOnPeerAccess, bool, true, ());
4950
ADDMETHOD_CONST_NOBASE(isSingleDispatchRequiredForMultiCCS, bool, false, ());
5051
ADDMETHOD_CONST_NOBASE(isStateCacheInvalidationWaRequired, bool, false, ());
5152

shared/test/unit_test/release_helper/release_helper_12_55_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1255Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
125125
whenShouldQueryPeerAccessCalledThenFalseReturned();
126126
}
127127

128+
TEST_F(ReleaseHelper1255Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
129+
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
130+
}
131+
128132
TEST_F(ReleaseHelper1255Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
129133
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
130134
}

shared/test/unit_test/release_helper/release_helper_12_56_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1256Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
125125
whenShouldQueryPeerAccessCalledThenFalseReturned();
126126
}
127127

128+
TEST_F(ReleaseHelper1256Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
129+
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
130+
}
131+
128132
TEST_F(ReleaseHelper1256Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
129133
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
130134
}

shared/test/unit_test/release_helper/release_helper_12_57_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1257Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
125125
whenShouldQueryPeerAccessCalledThenFalseReturned();
126126
}
127127

128+
TEST_F(ReleaseHelper1257Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
129+
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
130+
}
131+
128132
TEST_F(ReleaseHelper1257Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
129133
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
130134
}

shared/test/unit_test/release_helper/release_helper_12_60_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ TEST_F(ReleaseHelper1260Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
110110
whenShouldQueryPeerAccessCalledThenFalseReturned();
111111
}
112112

113+
TEST_F(ReleaseHelper1260Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
114+
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
115+
}
116+
113117
TEST_F(ReleaseHelper1260Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
114118
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
115119
}

0 commit comments

Comments
 (0)