mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Pass HwInfo to computeSlmValues function
Resolves: NEO-5215, NEO-5216 Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
0609a0915e
commit
edbda8e8b2
@ -161,6 +161,7 @@ size_t HardwareCommandsHelper<GfxFamily>::sendInterfaceDescriptorData(
|
||||
INTERFACE_DESCRIPTOR_DATA *inlineInterfaceDescriptor,
|
||||
const HardwareInfo &hardwareInfo) {
|
||||
using SAMPLER_STATE = typename GfxFamily::SAMPLER_STATE;
|
||||
using SHARED_LOCAL_MEMORY_SIZE = typename INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE;
|
||||
|
||||
// Allocate some memory for the interface descriptor
|
||||
auto pInterfaceDescriptor = getInterfaceDescriptor(indirectHeap, offsetInterfaceDescriptor, inlineInterfaceDescriptor);
|
||||
@ -185,7 +186,7 @@ size_t HardwareCommandsHelper<GfxFamily>::sendInterfaceDescriptorData(
|
||||
EncodeDispatchKernel<GfxFamily>::adjustBindingTablePrefetch(interfaceDescriptor, numSamplers, bindingTablePrefetchSize);
|
||||
|
||||
auto programmableIDSLMSize =
|
||||
static_cast<typename INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE>(HwHelperHw<GfxFamily>::get().computeSlmValues(kernel.slmTotalSize));
|
||||
static_cast<SHARED_LOCAL_MEMORY_SIZE>(HwHelperHw<GfxFamily>::get().computeSlmValues(hardwareInfo, kernel.slmTotalSize));
|
||||
|
||||
interfaceDescriptor.setSharedLocalMemorySize(programmableIDSLMSize);
|
||||
EncodeDispatchKernel<GfxFamily>::programBarrierEnable(interfaceDescriptor,
|
||||
|
@ -1115,41 +1115,51 @@ HWCMDTEST_F(IGFX_GEN8_CORE, HwHelperTest, GivenVariousValuesWhenAlignSlmSizeIsCa
|
||||
}
|
||||
|
||||
HWCMDTEST_F(IGFX_GEN8_CORE, HwHelperTest, GivenVariousValuesWhenComputeSlmSizeIsCalledThenCorrectValueIsReturned) {
|
||||
auto hwInfo = *defaultHwInfo;
|
||||
|
||||
if (::renderCoreFamily == IGFX_GEN8_CORE) {
|
||||
EXPECT_EQ(0u, HwHelperHw<FamilyType>::get().computeSlmValues(0));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(1));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(1024));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(1025));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(2048));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(2049));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(4096));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(4097));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(8192));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(8193));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(12288));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(16384));
|
||||
EXPECT_EQ(8u, HwHelperHw<FamilyType>::get().computeSlmValues(16385));
|
||||
EXPECT_EQ(8u, HwHelperHw<FamilyType>::get().computeSlmValues(24576));
|
||||
EXPECT_EQ(8u, HwHelperHw<FamilyType>::get().computeSlmValues(32768));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(32769));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(49152));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(65535));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(65536));
|
||||
EXPECT_EQ(0u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 0));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 1));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 1024));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 1025));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 2048));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 2049));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 4096));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 4097));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 8192));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 8193));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 12288));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 16384));
|
||||
EXPECT_EQ(8u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 16385));
|
||||
EXPECT_EQ(8u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 24576));
|
||||
EXPECT_EQ(8u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 32768));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 32769));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 49152));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 65535));
|
||||
EXPECT_EQ(16u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 65536));
|
||||
} else {
|
||||
EXPECT_EQ(0u, HwHelperHw<FamilyType>::get().computeSlmValues(0));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(1));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(1024));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(1025));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(2048));
|
||||
EXPECT_EQ(3u, HwHelperHw<FamilyType>::get().computeSlmValues(2049));
|
||||
EXPECT_EQ(3u, HwHelperHw<FamilyType>::get().computeSlmValues(4096));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(4097));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(8192));
|
||||
EXPECT_EQ(5u, HwHelperHw<FamilyType>::get().computeSlmValues(8193));
|
||||
EXPECT_EQ(5u, HwHelperHw<FamilyType>::get().computeSlmValues(16384));
|
||||
EXPECT_EQ(6u, HwHelperHw<FamilyType>::get().computeSlmValues(16385));
|
||||
EXPECT_EQ(6u, HwHelperHw<FamilyType>::get().computeSlmValues(32768));
|
||||
EXPECT_EQ(7u, HwHelperHw<FamilyType>::get().computeSlmValues(32769));
|
||||
EXPECT_EQ(7u, HwHelperHw<FamilyType>::get().computeSlmValues(65536));
|
||||
EXPECT_EQ(0u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 0));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 1));
|
||||
EXPECT_EQ(1u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 1024));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 1025));
|
||||
EXPECT_EQ(2u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 2048));
|
||||
EXPECT_EQ(3u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 2049));
|
||||
EXPECT_EQ(3u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 4096));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 4097));
|
||||
EXPECT_EQ(4u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 8192));
|
||||
EXPECT_EQ(5u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 8193));
|
||||
EXPECT_EQ(5u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 16384));
|
||||
EXPECT_EQ(6u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 16385));
|
||||
EXPECT_EQ(6u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 32768));
|
||||
EXPECT_EQ(7u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 32769));
|
||||
EXPECT_EQ(7u, HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 65536));
|
||||
}
|
||||
}
|
||||
|
||||
HWTEST_F(HwHelperTest, GivenZeroSlmSizeWhenComputeSlmSizeIsCalledThenCorrectValueIsReturned) {
|
||||
using SHARED_LOCAL_MEMORY_SIZE = typename FamilyType::INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE;
|
||||
auto hwInfo = *defaultHwInfo;
|
||||
|
||||
auto receivedSlmSize = static_cast<SHARED_LOCAL_MEMORY_SIZE>(HwHelperHw<FamilyType>::get().computeSlmValues(hwInfo, 0));
|
||||
EXPECT_EQ(SHARED_LOCAL_MEMORY_SIZE::SHARED_LOCAL_MEMORY_SIZE_ENCODES_0K, receivedSlmSize);
|
||||
}
|
||||
|
@ -72,11 +72,8 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container,
|
||||
kernelDescriptor.kernelAttributes.hasBarriers,
|
||||
hwInfo);
|
||||
auto slmSize = static_cast<typename INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE>(
|
||||
HwHelperHw<Family>::get().computeSlmValues(dispatchInterface->getSlmTotalSize()));
|
||||
idd.setSharedLocalMemorySize(
|
||||
dispatchInterface->getSlmTotalSize() > 0
|
||||
? slmSize
|
||||
: INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE_ENCODES_0K);
|
||||
HwHelperHw<Family>::get().computeSlmValues(hwInfo, dispatchInterface->getSlmTotalSize()));
|
||||
idd.setSharedLocalMemorySize(slmSize);
|
||||
|
||||
uint32_t bindingTableStateCount = kernelDescriptor.payloadMappings.bindingTable.numEntries;
|
||||
uint32_t bindingTablePointer = 0u;
|
||||
|
@ -28,7 +28,7 @@ uint32_t HwHelperHw<Family>::alignSlmSize(uint32_t slmSize) {
|
||||
}
|
||||
|
||||
template <>
|
||||
uint32_t HwHelperHw<Family>::computeSlmValues(uint32_t slmSize) {
|
||||
uint32_t HwHelperHw<Family>::computeSlmValues(const HardwareInfo &hwInfo, uint32_t slmSize) {
|
||||
slmSize += (4 * KB - 1);
|
||||
slmSize = slmSize >> 12;
|
||||
slmSize = std::min(slmSize, 15u);
|
||||
|
@ -98,7 +98,7 @@ class HwHelper {
|
||||
virtual uint32_t calculateAvailableThreadCount(PRODUCT_FAMILY family, uint32_t grfCount, uint32_t euCount,
|
||||
uint32_t threadsPerEu) = 0;
|
||||
virtual uint32_t alignSlmSize(uint32_t slmSize) = 0;
|
||||
virtual uint32_t computeSlmValues(uint32_t slmSize) = 0;
|
||||
virtual uint32_t computeSlmValues(const HardwareInfo &hwInfo, uint32_t slmSize) = 0;
|
||||
|
||||
virtual bool isForceEmuInt32DivRemSPWARequired(const HardwareInfo &hwInfo) = 0;
|
||||
virtual bool isWaDisableRccRhwoOptimizationRequired() const = 0;
|
||||
@ -257,7 +257,7 @@ class HwHelperHw : public HwHelper {
|
||||
|
||||
uint32_t alignSlmSize(uint32_t slmSize) override;
|
||||
|
||||
uint32_t computeSlmValues(uint32_t slmSize) override;
|
||||
uint32_t computeSlmValues(const HardwareInfo &hwInfo, uint32_t slmSize) override;
|
||||
|
||||
static AuxTranslationMode getAuxTranslationMode();
|
||||
|
||||
|
@ -326,7 +326,7 @@ uint32_t HwHelperHw<GfxFamily>::alignSlmSize(uint32_t slmSize) {
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t HwHelperHw<GfxFamily>::computeSlmValues(uint32_t slmSize) {
|
||||
uint32_t HwHelperHw<GfxFamily>::computeSlmValues(const HardwareInfo &hwInfo, uint32_t slmSize) {
|
||||
auto value = std::max(slmSize, 1024u);
|
||||
value = Math::nextPowerOfTwo(value);
|
||||
value = Math::getMinLsbSet(value);
|
||||
|
@ -251,7 +251,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandEncodeStatesTest, givenSlmTotalSizeGraterThan
|
||||
auto interfaceDescriptorData = static_cast<INTERFACE_DESCRIPTOR_DATA *>(cmdContainer->getIddBlock());
|
||||
|
||||
uint32_t expectedValue = static_cast<typename INTERFACE_DESCRIPTOR_DATA::SHARED_LOCAL_MEMORY_SIZE>(
|
||||
HwHelperHw<FamilyType>::get().computeSlmValues(slmTotalSize));
|
||||
HwHelperHw<FamilyType>::get().computeSlmValues(pDevice->getHardwareInfo(), slmTotalSize));
|
||||
|
||||
EXPECT_EQ(expectedValue, interfaceDescriptorData->getSharedLocalMemorySize());
|
||||
}
|
||||
|
Reference in New Issue
Block a user