Add isMatrixMultiplyAccumulateSupported query to HwInfoConfig

Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski 2022-05-25 15:35:43 +00:00 committed by Compute-Runtime-Automation
parent b821027ddf
commit d7420f1786
15 changed files with 70 additions and 14 deletions

View File

@ -228,7 +228,7 @@ void ClDevice::initializeCaps() {
deviceExtensions += "cl_khr_pci_bus_info ";
}
deviceExtensions += hwHelper.getExtensions();
deviceExtensions += hwHelper.getExtensions(hwInfo);
deviceInfo.deviceExtensions = deviceExtensions.c_str();
std::vector<std::string> exposedBuiltinKernelsVector;

View File

@ -9,8 +9,10 @@
#include "shared/source/os_interface/hw_info_config.h"
#include "shared/test/common/helpers/hw_helper_tests.h"
#include "shared/test/common/test_macros/test.h"
#include "shared/test/unit_test/helpers/gtest_helpers.h"
#include "opencl/test/unit_test/fixtures/cl_device_fixture.h"
#include "opencl/test/unit_test/mocks/ult_cl_device_factory.h"
#include "gtest/gtest.h"
@ -75,3 +77,13 @@ DG2TEST_F(Dg2UsDeviceIdTest, givenRevisionEnumThenProperMaxThreadsForWorkgroupIs
uint32_t numThreadsPerEU = hardwareInfo.gtSystemInfo.ThreadCount / hardwareInfo.gtSystemInfo.EUCount;
EXPECT_EQ(64u * numThreadsPerEU, hwInfoConfig.getMaxThreadsForWorkgroupInDSSOrSS(hardwareInfo, 64u, 64u));
}
using Dg2DeviceCapsTest = ::testing::Test;
DG2TEST_F(Dg2DeviceCapsTest, whenCheckingExtensionThenCorrectExtensionsAreReported) {
UltClDeviceFactory deviceFactory{1, 0};
auto &extensions = deviceFactory.rootDevices[0]->deviceExtensions;
EXPECT_TRUE(hasSubstr(extensions, std::string("cl_intel_bfloat16_conversions")));
EXPECT_TRUE(hasSubstr(extensions, std::string("cl_intel_subgroup_matrix_multiply_accumulate")));
EXPECT_TRUE(hasSubstr(extensions, std::string("cl_intel_subgroup_split_matrix_multiply_accumulate")));
}

View File

@ -44,8 +44,10 @@ XE_HPG_CORETEST_F(XeHpgCoreDeviceCaps, giveDeviceExtensionsWhenDeviceCapsInitial
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_create_buffer_with_properties")));
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_dot_accumulate")));
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_subgroup_local_block_io")));
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_subgroup_matrix_multiply_accumulate")));
EXPECT_TRUE(hasSubstr(caps.deviceExtensions, std::string("cl_intel_subgroup_split_matrix_multiply_accumulate")));
bool expectMatrixMultiplyAccumulateExtensions = hwInfoConfig.isMatrixMultiplyAccumulateSupported(pClDevice->getHardwareInfo());
EXPECT_EQ(expectMatrixMultiplyAccumulateExtensions, hasSubstr(caps.deviceExtensions, std::string("cl_intel_subgroup_matrix_multiply_accumulate")));
EXPECT_EQ(expectMatrixMultiplyAccumulateExtensions, hasSubstr(caps.deviceExtensions, std::string("cl_intel_subgroup_split_matrix_multiply_accumulate")));
bool expectBFloat16ConversionsExtension = hwInfoConfig.isBFloat16ConversionSupported(pClDevice->getHardwareInfo());
EXPECT_EQ(expectBFloat16ConversionsExtension, hasSubstr(caps.deviceExtensions, std::string("cl_intel_bfloat16_conversions")));

View File

@ -21,7 +21,7 @@ uint32_t HwHelperHw<Family>::getComputeUnitsUsedForScratch(const HardwareInfo *p
}
template <>
std::string HwHelperHw<Family>::getExtensions() const {
std::string HwHelperHw<Family>::getExtensions(const HardwareInfo &hwInfo) const {
return "cl_intel_subgroup_local_block_io ";
}

View File

@ -131,7 +131,7 @@ EngineGroupType HwHelperHw<Family>::getEngineGroupType(aub_stream::EngineType en
}
template <>
std::string HwHelperHw<Family>::getExtensions() const {
std::string HwHelperHw<Family>::getExtensions(const HardwareInfo &hwInfo) const {
std::string extensions;
extensions += "cl_intel_subgroup_local_block_io ";

View File

@ -83,7 +83,7 @@ class HwHelper {
virtual const StackVec<size_t, 3> getDeviceSubGroupSizes() const = 0;
virtual const StackVec<uint32_t, 6> getThreadsPerEUConfigs() const = 0;
virtual bool getEnableLocalMemory(const HardwareInfo &hwInfo) const = 0;
virtual std::string getExtensions() const = 0;
virtual std::string getExtensions(const HardwareInfo &hwInfo) const = 0;
static uint32_t getMaxThreadsForVfe(const HardwareInfo &hwInfo);
virtual uint32_t getMetricsLibraryGenId() const = 0;
virtual uint32_t getMocsIndex(const GmmHelper &gmmHelper, bool l3enabled, bool l1enabled) const = 0;
@ -281,7 +281,7 @@ class HwHelperHw : public HwHelper {
bool getEnableLocalMemory(const HardwareInfo &hwInfo) const override;
std::string getExtensions() const override;
std::string getExtensions(const HardwareInfo &hwInfo) const override;
uint32_t getMetricsLibraryGenId() const override;

View File

@ -80,7 +80,7 @@ EngineGroupType HwHelperHw<GfxFamily>::getEngineGroupType(aub_stream::EngineType
}
template <typename GfxFamily>
std::string HwHelperHw<GfxFamily>::getExtensions() const {
std::string HwHelperHw<GfxFamily>::getExtensions(const HardwareInfo &hwInfo) const {
return "";
}

View File

@ -101,6 +101,7 @@ class HwInfoConfig {
virtual bool isComputeDispatchAllWalkerEnableInCfeStateRequired(const HardwareInfo &hwInfo) const = 0;
virtual bool isVmBindPatIndexProgrammingSupported() const = 0;
virtual bool isBFloat16ConversionSupported(const HardwareInfo &hwInfo) const = 0;
virtual bool isMatrixMultiplyAccumulateSupported(const HardwareInfo &hwInfo) const = 0;
virtual bool useChannelRedForUnusedShaderChannels() const = 0;
virtual bool isIpSamplingSupported(const NEO::HardwareInfo &hwInfo) const = 0;
virtual bool isGrfNumReportedWithScm() const = 0;
@ -195,6 +196,7 @@ class HwInfoConfigHw : public HwInfoConfig {
bool isComputeDispatchAllWalkerEnableInCfeStateRequired(const HardwareInfo &hwInfo) const override;
bool isVmBindPatIndexProgrammingSupported() const override;
bool isBFloat16ConversionSupported(const HardwareInfo &hwInfo) const override;
bool isMatrixMultiplyAccumulateSupported(const HardwareInfo &hwInfo) const override;
bool useChannelRedForUnusedShaderChannels() const override;
bool isIpSamplingSupported(const NEO::HardwareInfo &hwInfo) const override;
bool isGrfNumReportedWithScm() const override;

View File

@ -412,4 +412,10 @@ template <PRODUCT_FAMILY gfxProduct>
bool HwInfoConfigHw<gfxProduct>::isImplicitScalingSupported(const HardwareInfo &hwInfo) const {
return false;
}
template <PRODUCT_FAMILY gfxProduct>
bool HwInfoConfigHw<gfxProduct>::isMatrixMultiplyAccumulateSupported(const HardwareInfo &hwInfo) const {
return false;
}
} // namespace NEO

View File

@ -91,7 +91,7 @@ const StackVec<uint32_t, 6> HwHelperHw<Family>::getThreadsPerEUConfigs() const {
}
template <>
std::string HwHelperHw<Family>::getExtensions() const {
std::string HwHelperHw<Family>::getExtensions(const HardwareInfo &hwInfo) const {
std::string extensions;
extensions += "cl_intel_dot_accumulate ";
extensions += "cl_intel_subgroup_local_block_io ";

View File

@ -280,7 +280,7 @@ uint32_t HwHelperHw<Family>::getNumCacheRegions() const {
}
template <>
std::string HwHelperHw<Family>::getExtensions() const {
std::string HwHelperHw<Family>::getExtensions(const HardwareInfo &hwInfo) const {
std::string extensions;
extensions += "cl_intel_create_buffer_with_properties ";

View File

@ -180,3 +180,8 @@ template <>
bool HwInfoConfigHw<gfxProduct>::isTimestampWaitSupportedForEvents() const {
return true;
}
template <>
bool HwInfoConfigHw<gfxProduct>::isMatrixMultiplyAccumulateSupported(const HardwareInfo &hwInfo) const {
return true;
}

View File

@ -83,13 +83,17 @@ const StackVec<uint32_t, 6> HwHelperHw<Family>::getThreadsPerEUConfigs() const {
}
template <>
std::string HwHelperHw<Family>::getExtensions() const {
std::string HwHelperHw<Family>::getExtensions(const HardwareInfo &hwInfo) const {
std::string extensions;
extensions += "cl_intel_create_buffer_with_properties ";
extensions += "cl_intel_dot_accumulate ";
extensions += "cl_intel_subgroup_local_block_io ";
extensions += "cl_intel_subgroup_matrix_multiply_accumulate ";
extensions += "cl_intel_subgroup_split_matrix_multiply_accumulate ";
auto &hwInfoConfig = *HwInfoConfig::get(hwInfo.platform.eProductFamily);
if (hwInfoConfig.isMatrixMultiplyAccumulateSupported(hwInfo)) {
extensions += "cl_intel_subgroup_matrix_multiply_accumulate ";
extensions += "cl_intel_subgroup_split_matrix_multiply_accumulate ";
}
return extensions;
}

View File

@ -8,9 +8,10 @@ if(TESTS_DG2)
target_sources(neo_shared_tests PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/compute_mode_tests_dg2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/device_binary_format_ar_tests_dg2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/hw_helper_tests_dg2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_tests_dg2.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}product_config_tests_dg2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/device_binary_format_ar_tests_dg2.cpp
)
add_subdirectories()
endif()

View File

@ -0,0 +1,24 @@
/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/helpers/hw_helper.h"
#include "shared/test/common/helpers/default_hw_info.h"
#include "shared/test/common/mocks/ult_device_factory.h"
#include "shared/test/common/test_macros/test.h"
#include "shared/test/unit_test/helpers/gtest_helpers.h"
using namespace NEO;
using HwHelperTestDg2 = ::testing::Test;
DG2TEST_F(HwHelperTestDg2, whenGetExtensionsIsCalledThenMatrixMultiplyAccumulateExtensionsAreReturned) {
auto &hwHelper = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily);
auto extensions = hwHelper.getExtensions(*defaultHwInfo);
EXPECT_TRUE(hasSubstr(extensions, std::string("cl_intel_subgroup_matrix_multiply_accumulate")));
EXPECT_TRUE(hasSubstr(extensions, std::string("cl_intel_subgroup_split_matrix_multiply_accumulate")));
}