mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
feature: Add Initial Support for Get Vector Width Properties
- Added support for L0 to query Vector Width Properties which allows for querying all the supported vector widths and their prefferred and native vector widths per data type. - Updated shared code to support querying the same values thru getPreferredVectorWidth* and getNativeVectorWidth* helper functions for OpenCL and Level Zero. - Initial support for reporting base values for the vector widths with future support for reporting different values per platform and based on the SIMD/SIMT size used. Related-To: NEO-13745 Signed-off-by: Neil R. Spruit <neil.r.spruit@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
39b28474ae
commit
532c663da6
@@ -105,6 +105,18 @@ class GfxCoreHelper {
|
||||
|
||||
virtual bool isWaDisableRccRhwoOptimizationRequired() const = 0;
|
||||
virtual uint32_t getMinimalSIMDSize() const = 0;
|
||||
virtual uint32_t getPreferredVectorWidthChar(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getPreferredVectorWidthShort(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getPreferredVectorWidthInt(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getPreferredVectorWidthLong(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getPreferredVectorWidthFloat(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getPreferredVectorWidthHalf(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getNativeVectorWidthChar(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getNativeVectorWidthShort(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getNativeVectorWidthInt(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getNativeVectorWidthLong(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getNativeVectorWidthFloat(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getNativeVectorWidthHalf(uint32_t vectorWidthSize) const = 0;
|
||||
virtual uint32_t getMinimalGrfSize() const = 0;
|
||||
virtual bool isOffsetToSkipSetFFIDGPWARequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const = 0;
|
||||
virtual bool isFusedEuDispatchEnabled(const HardwareInfo &hwInfo, bool disableEUFusionForKernel) const = 0;
|
||||
@@ -337,6 +349,19 @@ class GfxCoreHelperHw : public GfxCoreHelper {
|
||||
|
||||
uint32_t getMinimalSIMDSize() const override;
|
||||
|
||||
uint32_t getPreferredVectorWidthChar(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getPreferredVectorWidthShort(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getPreferredVectorWidthInt(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getPreferredVectorWidthLong(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getPreferredVectorWidthFloat(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getPreferredVectorWidthHalf(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getNativeVectorWidthChar(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getNativeVectorWidthShort(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getNativeVectorWidthInt(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getNativeVectorWidthLong(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getNativeVectorWidthFloat(uint32_t vectorWidthSize) const override;
|
||||
uint32_t getNativeVectorWidthHalf(uint32_t vectorWidthSize) const override;
|
||||
|
||||
uint32_t getMinimalGrfSize() const override;
|
||||
|
||||
uint64_t getGpuTimeStampInNS(uint64_t timeStamp, double resolution) const override;
|
||||
|
||||
@@ -463,6 +463,66 @@ inline uint32_t GfxCoreHelperHw<GfxFamily>::getMinimalSIMDSize() const {
|
||||
return 8u;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getPreferredVectorWidthChar(uint32_t vectorWidthSize) const {
|
||||
return 16;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getPreferredVectorWidthShort(uint32_t vectorWidthSize) const {
|
||||
return 8;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getPreferredVectorWidthInt(uint32_t vectorWidthSize) const {
|
||||
return 4;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getPreferredVectorWidthLong(uint32_t vectorWidthSize) const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getPreferredVectorWidthFloat(uint32_t vectorWidthSize) const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getPreferredVectorWidthHalf(uint32_t vectorWidthSize) const {
|
||||
return 8;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getNativeVectorWidthChar(uint32_t vectorWidthSize) const {
|
||||
return 16;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getNativeVectorWidthShort(uint32_t vectorWidthSize) const {
|
||||
return 8;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getNativeVectorWidthInt(uint32_t vectorWidthSize) const {
|
||||
return 4;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getNativeVectorWidthLong(uint32_t vectorWidthSize) const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getNativeVectorWidthFloat(uint32_t vectorWidthSize) const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
uint32_t GfxCoreHelperHw<GfxFamily>::getNativeVectorWidthHalf(uint32_t vectorWidthSize) const {
|
||||
return 8;
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
std::unique_ptr<TagAllocatorBase> GfxCoreHelperHw<GfxFamily>::createTimestampPacketAllocator(const RootDeviceIndicesContainer &rootDeviceIndices, MemoryManager *memoryManager,
|
||||
size_t initialTagCount, CommandStreamReceiverType csrType, DeviceBitfield deviceBitfield) const {
|
||||
|
||||
@@ -1061,6 +1061,26 @@ HWTEST_F(GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenMinimalSIMDSizeIsQuer
|
||||
EXPECT_EQ(8u, gfxCoreHelper.getMinimalSIMDSize());
|
||||
}
|
||||
|
||||
HWTEST_F(GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenGettingPreferredVectorWidthsThenCorrectValuesAreReturned) {
|
||||
const auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
|
||||
EXPECT_EQ(16u, gfxCoreHelper.getPreferredVectorWidthChar(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(8u, gfxCoreHelper.getPreferredVectorWidthShort(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(4u, gfxCoreHelper.getPreferredVectorWidthInt(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(1u, gfxCoreHelper.getPreferredVectorWidthLong(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(1u, gfxCoreHelper.getPreferredVectorWidthFloat(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(8u, gfxCoreHelper.getPreferredVectorWidthHalf(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
}
|
||||
|
||||
HWTEST_F(GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenGettingNativeVectorWidthsThenCorrectValuesAreReturned) {
|
||||
const auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
|
||||
EXPECT_EQ(16u, gfxCoreHelper.getNativeVectorWidthChar(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(8u, gfxCoreHelper.getNativeVectorWidthShort(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(4u, gfxCoreHelper.getNativeVectorWidthInt(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(1u, gfxCoreHelper.getNativeVectorWidthLong(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(1u, gfxCoreHelper.getNativeVectorWidthFloat(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
EXPECT_EQ(8u, gfxCoreHelper.getNativeVectorWidthHalf(gfxCoreHelper.getMinimalSIMDSize()));
|
||||
}
|
||||
|
||||
HWTEST_F(GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenMinimalGrfSizeIsQueriedThen128IsReturned) {
|
||||
const auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
|
||||
EXPECT_EQ(128u, gfxCoreHelper.getMinimalGrfSize());
|
||||
|
||||
Reference in New Issue
Block a user