fix: Disallow USM compression on peer access

Related-To: NEO-15427

Signed-off-by: Vysochyn, Illia <illia.vysochyn@intel.com>
This commit is contained in:
Vysochyn, Illia
2025-11-12 13:04:14 +00:00
committed by Compute-Runtime-Automation
parent 91fe2ec380
commit dc85f33e49
24 changed files with 111 additions and 0 deletions

View File

@@ -26,6 +26,7 @@
#include "shared/source/os_interface/os_context.h"
#include "shared/source/os_interface/product_helper.h"
#include "shared/source/page_fault_manager/cpu_page_fault_manager.h"
#include "shared/source/release_helper/release_helper.h"
namespace NEO {
uint32_t SVMAllocsManager::UnifiedMemoryProperties::getRootDeviceIndex() const {
@@ -506,6 +507,14 @@ void *SVMAllocsManager::createUnifiedMemoryAllocation(size_t size,
bool compressionEnabled = false;
AllocationType allocationType = getGraphicsAllocationTypeAndCompressionPreference(memoryProperties, compressionEnabled);
if (memoryProperties.device) {
auto *releaseHelper = memoryProperties.device->getReleaseHelper();
const bool peerAccess = memoryProperties.device->hasAnyPeerAccess().value_or(false);
if (peerAccess && !releaseHelper->isUsmCompressionSupportedOnPeerAccess()) {
compressionEnabled = false;
}
}
bool multiStorageAllocation = (deviceBitfield.count() > 1);
AllocationProperties unifiedMemoryProperties{rootDeviceIndex,

View File

@@ -68,6 +68,7 @@ class ReleaseHelper {
virtual bool isPostImageWriteFlushRequired() const = 0;
virtual uint32_t adjustMaxThreadsPerEuCount(uint32_t maxThreadsPerEuCount, uint32_t grfCount) const = 0;
virtual bool shouldQueryPeerAccess() const = 0;
virtual bool isUsmCompressionSupportedOnPeerAccess() const = 0;
virtual bool isSingleDispatchRequiredForMultiCCS() const = 0;
virtual bool isStateCacheInvalidationWaRequired() const = 0;
@@ -117,6 +118,7 @@ class ReleaseHelperHw : public ReleaseHelper {
bool isPostImageWriteFlushRequired() const override;
uint32_t adjustMaxThreadsPerEuCount(uint32_t maxThreadsPerEuCount, uint32_t grfCount) const override;
bool shouldQueryPeerAccess() const override;
bool isUsmCompressionSupportedOnPeerAccess() const override;
bool isSingleDispatchRequiredForMultiCCS() const override;
bool isStateCacheInvalidationWaRequired() const override;

View File

@@ -54,6 +54,11 @@ bool ReleaseHelperHw<release>::shouldQueryPeerAccess() const {
return true;
}
template <>
bool ReleaseHelperHw<release>::isUsmCompressionSupportedOnPeerAccess() const {
return false;
}
template <>
bool ReleaseHelperHw<release>::isSingleDispatchRequiredForMultiCCS() const {
return true;

View File

@@ -54,6 +54,11 @@ bool ReleaseHelperHw<release>::shouldQueryPeerAccess() const {
return true;
}
template <>
bool ReleaseHelperHw<release>::isUsmCompressionSupportedOnPeerAccess() const {
return false;
}
template <>
bool ReleaseHelperHw<release>::isSingleDispatchRequiredForMultiCCS() const {
return true;

View File

@@ -186,6 +186,11 @@ bool ReleaseHelperHw<releaseType>::shouldQueryPeerAccess() const {
return false;
}
template <ReleaseType releaseType>
bool ReleaseHelperHw<releaseType>::isUsmCompressionSupportedOnPeerAccess() const {
return true;
}
template <ReleaseType releaseType>
bool ReleaseHelperHw<releaseType>::isSingleDispatchRequiredForMultiCCS() const {
return false;

View File

@@ -46,6 +46,7 @@ class MockReleaseHelper : public ReleaseHelper {
ADDMETHOD_CONST_NOBASE(adjustMaxThreadsPerEuCount, uint32_t, 8u, (uint32_t maxThreadsPerEuCount, uint32_t grfCount));
ADDMETHOD_CONST_NOBASE_VOIDRETURN(adjustRTDispatchGlobals, (void *rtDispatchGlobals, uint32_t rtStacksPerDss, bool heaplessEnabled, uint32_t maxBvhLevels));
ADDMETHOD_CONST_NOBASE(shouldQueryPeerAccess, bool, false, ());
ADDMETHOD_CONST_NOBASE(isUsmCompressionSupportedOnPeerAccess, bool, true, ());
ADDMETHOD_CONST_NOBASE(isSingleDispatchRequiredForMultiCCS, bool, false, ());
ADDMETHOD_CONST_NOBASE(isStateCacheInvalidationWaRequired, bool, false, ());

View File

@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1255Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1255Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1255Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1256Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1256Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1256Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1257Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1257Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1257Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -110,6 +110,10 @@ TEST_F(ReleaseHelper1260Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1260Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1260Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -109,6 +109,10 @@ TEST_F(ReleaseHelper1261Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1261Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1261Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper1270Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1270Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1270Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper1271Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1271Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1271Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1274Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper1274Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper1274Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -118,6 +118,10 @@ TEST_F(ReleaseHelper2001Tests, whenShouldQueryPeerAccessCalledThenTrueReturned)
whenShouldQueryPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper2001Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper2001Tests, whenIsSingleDispatchRequiredForMultiCCSThenTrueReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenTrueReturned();
}

View File

@@ -118,6 +118,10 @@ TEST_F(ReleaseHelper2002Tests, whenShouldQueryPeerAccessCalledThenTrueReturned)
whenShouldQueryPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper2002Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper2002Tests, whenIsSingleDispatchRequiredForMultiCCSThenTrueReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenTrueReturned();
}

View File

@@ -121,6 +121,10 @@ TEST_F(ReleaseHelper2004Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper2004Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper2004Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3000Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper3000Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper3000Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3001Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper3001Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper3001Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3003Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper3003Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper3003Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3004Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper3004Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper3004Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3005Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
whenShouldQueryPeerAccessCalledThenFalseReturned();
}
TEST_F(ReleaseHelper3005Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
}
TEST_F(ReleaseHelper3005Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
}

View File

@@ -216,6 +216,24 @@ void ReleaseHelperTestsBase::whenShouldQueryPeerAccessCalledThenTrueReturned() {
}
}
void ReleaseHelperTestsBase::whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned() {
for (auto &revision : getRevisions()) {
ipVersion.revision = revision;
releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
EXPECT_FALSE(releaseHelper->isUsmCompressionSupportedOnPeerAccess());
}
}
void ReleaseHelperTestsBase::whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned() {
for (auto &revision : getRevisions()) {
ipVersion.revision = revision;
releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
EXPECT_TRUE(releaseHelper->isUsmCompressionSupportedOnPeerAccess());
}
}
void ReleaseHelperTestsBase::whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned() {
for (auto &revision : getRevisions()) {
ipVersion.revision = revision;

View File

@@ -39,6 +39,8 @@ struct ReleaseHelperTestsBase : public ::testing::Test {
void whenCallingAdjustMaxThreadsPerEuCountThenCorrectValueIsReturned();
void whenShouldQueryPeerAccessCalledThenFalseReturned();
void whenShouldQueryPeerAccessCalledThenTrueReturned();
void whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned();
void whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
void whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
void whenIsSingleDispatchRequiredForMultiCCSCalledThenTrueReturned();
void whenIsStateCacheInvalidationWaRequiredCalledThenFalseReturned();