mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 00:24:58 +08:00
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:
committed by
Compute-Runtime-Automation
parent
91fe2ec380
commit
dc85f33e49
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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, ());
|
||||
|
||||
|
||||
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1255Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1255Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1255Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1256Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1256Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1256Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1257Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1257Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1257Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -110,6 +110,10 @@ TEST_F(ReleaseHelper1260Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1260Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1260Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -109,6 +109,10 @@ TEST_F(ReleaseHelper1261Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1261Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1261Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper1270Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1270Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1270Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper1271Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1271Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1271Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -125,6 +125,10 @@ TEST_F(ReleaseHelper1274Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1274Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper1274Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -118,6 +118,10 @@ TEST_F(ReleaseHelper2001Tests, whenShouldQueryPeerAccessCalledThenTrueReturned)
|
||||
whenShouldQueryPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper2001Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper2001Tests, whenIsSingleDispatchRequiredForMultiCCSThenTrueReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
@@ -118,6 +118,10 @@ TEST_F(ReleaseHelper2002Tests, whenShouldQueryPeerAccessCalledThenTrueReturned)
|
||||
whenShouldQueryPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper2002Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper2002Tests, whenIsSingleDispatchRequiredForMultiCCSThenTrueReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
@@ -121,6 +121,10 @@ TEST_F(ReleaseHelper2004Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper2004Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper2004Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3000Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3000Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3000Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3001Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3001Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3001Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3003Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3003Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3003Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3004Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3004Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3004Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -119,6 +119,10 @@ TEST_F(ReleaseHelper3005Tests, whenShouldQueryPeerAccessCalledThenFalseReturned)
|
||||
whenShouldQueryPeerAccessCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3005Tests, whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned) {
|
||||
whenIsUsmCompressionSupportedOnPeerAccessCalledThenTrueReturned();
|
||||
}
|
||||
|
||||
TEST_F(ReleaseHelper3005Tests, whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned) {
|
||||
whenIsSingleDispatchRequiredForMultiCCSCalledThenFalseReturned();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user