feature: introduce release helper

Related-To: NEO-7786
Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
This commit is contained in:
Kamil Kopryk
2023-04-13 14:16:49 +00:00
committed by Compute-Runtime-Automation
parent 80f1e0e413
commit 171e97e71a
38 changed files with 342 additions and 52 deletions

View File

@@ -0,0 +1,27 @@
#
# Copyright (C) 2023 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
set(NEO_CORE_RELEASE_HELPER
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/release_helper.h
${CMAKE_CURRENT_SOURCE_DIR}/release_helper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/release_helper_base.inl
${CMAKE_CURRENT_SOURCE_DIR}/definitions${BRANCH_DIR_SUFFIX}release_definitions.h
${CMAKE_CURRENT_SOURCE_DIR}/release_helper.cpp
)
if(SUPPORT_XE_HPG_CORE)
list(APPEND NEO_CORE_RELEASE_HELPER
${CMAKE_CURRENT_SOURCE_DIR}/release_helper_common_xe_lpg.inl
${CMAKE_CURRENT_SOURCE_DIR}/release_helper_1270.cpp
${CMAKE_CURRENT_SOURCE_DIR}/release_helper_1271.cpp
)
set_property(GLOBAL APPEND PROPERTY NEO_CORE_SRCS_LINK ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}enable_release_helper_xe.cpp)
endif()
set_property(GLOBAL APPEND PROPERTY NEO_CORE_RELEASE_HELPER ${NEO_CORE_RELEASE_HELPER})
add_subdirectories()

View File

@@ -0,0 +1,17 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
namespace NEO {
enum class ReleaseType {
release1270 = 0,
release1271 = 1,
};
} // namespace NEO

View File

@@ -0,0 +1,21 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/release_helper/release_helper.h"
#include "release_definitions.h"
namespace NEO {
inline constexpr uint32_t maxReleaseXe = 75;
inline createReleaseHelperFunctionType releaseHelperFactoryXe[maxReleaseXe]{};
EnableReleaseHelperArchitecture<12> enableReleaseHelperArchitecture12{releaseHelperFactoryXe};
EnableReleaseHelper<ReleaseType::release1270> enablerReleaseHelper1270{releaseHelperFactoryXe[70]};
EnableReleaseHelper<ReleaseType::release1271> enablerReleaseHelper1271{releaseHelperFactoryXe[71]};
} // namespace NEO

View File

@@ -0,0 +1,23 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/release_helper/release_helper.h"
namespace NEO {
std::unique_ptr<ReleaseHelper> ReleaseHelper::create(HardwareIpVersion hardwareIpVersion) {
auto architecture = hardwareIpVersion.architecture;
auto release = hardwareIpVersion.release;
if (releaseHelperFactory[architecture] == nullptr || releaseHelperFactory[architecture][release] == nullptr) {
return {nullptr};
}
auto createFunction = releaseHelperFactory[architecture][release];
return createFunction(hardwareIpVersion);
}
} // namespace NEO

View File

@@ -0,0 +1,61 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/hw_ip_version.h"
#include <memory>
namespace NEO {
class ReleaseHelper;
enum class ReleaseType;
inline constexpr uint32_t maxArchitecture = 64;
using createReleaseHelperFunctionType = std::unique_ptr<ReleaseHelper> (*)(HardwareIpVersion hardwareIpVersion);
inline createReleaseHelperFunctionType *releaseHelperFactory[maxArchitecture]{};
class ReleaseHelper {
public:
static std::unique_ptr<ReleaseHelper> create(HardwareIpVersion hardwareIpVersion);
virtual bool isMatrixMultiplyAccumulateSupported() const = 0;
virtual ~ReleaseHelper() = default;
protected:
ReleaseHelper(HardwareIpVersion hardwareIpVersion) : hardwareIpVersion(hardwareIpVersion) {}
HardwareIpVersion hardwareIpVersion{};
};
template <ReleaseType releaseType>
class ReleaseHelperHw : public ReleaseHelper {
public:
static std::unique_ptr<ReleaseHelper> create(HardwareIpVersion hardwareIpVersion) {
return std::unique_ptr<ReleaseHelper>(new ReleaseHelperHw<releaseType>{hardwareIpVersion});
}
bool isMatrixMultiplyAccumulateSupported() const override;
private:
ReleaseHelperHw(HardwareIpVersion hardwareIpVersion) : ReleaseHelper(hardwareIpVersion) {}
};
template <uint32_t architecture>
struct EnableReleaseHelperArchitecture {
EnableReleaseHelperArchitecture(createReleaseHelperFunctionType *releaseTable) {
releaseHelperFactory[architecture] = releaseTable;
}
};
template <ReleaseType releaseType>
struct EnableReleaseHelper {
EnableReleaseHelper(createReleaseHelperFunctionType &releaseTableEntry) {
using ReleaseHelperType = ReleaseHelperHw<releaseType>;
releaseTableEntry = ReleaseHelperType::create;
}
};
} // namespace NEO

View File

@@ -0,0 +1,18 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/release_helper/release_helper.h"
#include "shared/source/release_helper/release_helper_base.inl"
#include "release_definitions.h"
namespace NEO {
constexpr auto release = ReleaseType::release1270;
} // namespace NEO
#include "shared/source/release_helper/release_helper_common_xe_lpg.inl"
template class NEO::ReleaseHelperHw<NEO::release>;

View File

@@ -0,0 +1,20 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/release_helper/release_helper.h"
#include "shared/source/release_helper/release_helper_base.inl"
#include "release_definitions.h"
namespace NEO {
constexpr auto release = ReleaseType::release1271;
} // namespace NEO
#include "shared/source/release_helper/release_helper_common_xe_lpg.inl"
template class NEO::ReleaseHelperHw<NEO::release>;

View File

@@ -0,0 +1,17 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/release_helper/release_helper.h"
namespace NEO {
template <ReleaseType releaseType>
bool ReleaseHelperHw<releaseType>::isMatrixMultiplyAccumulateSupported() const {
return true;
}
} // namespace NEO

View File

@@ -0,0 +1,17 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/release_helper/release_helper.h"
namespace NEO {
template <>
bool ReleaseHelperHw<release>::isMatrixMultiplyAccumulateSupported() const {
return false;
}
} // namespace NEO