mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 22:43:00 +08:00
feature: introduce release helper
Related-To: NEO-7786 Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
80f1e0e413
commit
171e97e71a
27
shared/source/release_helper/CMakeLists.txt
Normal file
27
shared/source/release_helper/CMakeLists.txt
Normal 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()
|
||||
@@ -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
|
||||
21
shared/source/release_helper/enable_release_helper_xe.cpp
Normal file
21
shared/source/release_helper/enable_release_helper_xe.cpp
Normal 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
|
||||
23
shared/source/release_helper/release_helper.cpp
Normal file
23
shared/source/release_helper/release_helper.cpp
Normal 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
|
||||
61
shared/source/release_helper/release_helper.h
Normal file
61
shared/source/release_helper/release_helper.h
Normal 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
|
||||
18
shared/source/release_helper/release_helper_1270.cpp
Normal file
18
shared/source/release_helper/release_helper_1270.cpp
Normal 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>;
|
||||
20
shared/source/release_helper/release_helper_1271.cpp
Normal file
20
shared/source/release_helper/release_helper_1271.cpp
Normal 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>;
|
||||
17
shared/source/release_helper/release_helper_base.inl
Normal file
17
shared/source/release_helper/release_helper_base.inl
Normal 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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user