fix: define timestamp mask based on timer resolution

Related-To: HSD-18034577551
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2023-10-27 09:15:35 +02:00
committed by Compute-Runtime-Automation
parent f9f5377218
commit 1e18bf0392
2 changed files with 26 additions and 7 deletions

View File

@@ -717,8 +717,8 @@ char const *GfxCoreHelperHw<GfxFamily>::getDefaultDeviceHierarchy() const {
template <typename GfxFamily>
uint64_t GfxCoreHelperHw<GfxFamily>::getGpuTimeStampInNS(uint64_t timeStamp, double resolution) const {
UNRECOVERABLE_IF(resolution > 127.0);
constexpr auto timestampMask = maxNBitValue(57);
auto numBitsForResolution = Math::log2(static_cast<uint64_t>(resolution)) + 1u;
auto timestampMask = maxNBitValue(64 - numBitsForResolution);
return static_cast<uint64_t>(static_cast<uint64_t>(timeStamp & timestampMask) * resolution);
}

View File

@@ -149,14 +149,33 @@ HWTEST2_F(GfxCoreHelperTest, givenGfxCoreHelperWhenGettingThreadsPerEUConfigsThe
EXPECT_EQ(0U, configs.size());
}
TEST_F(GfxCoreHelperTest, givenGfxCoreHelperWhenGetGpuTimeStampInNSIsCalledThenCorrectValueIsReturned) {
TEST_F(GfxCoreHelperTest, whenGetGpuTimeStampInNSIsCalledThenTimestampIsMaskedBasedOnResolution) {
auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
auto timeStamp0 = 0x00ff'ffff'ffff;
auto timeStamp1 = 0xfe00'00ff'ffff'ffff;
auto resolution = 123.0;
auto result = static_cast<uint64_t>(timeStamp0 * resolution);
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp0, resolution));
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp1, resolution));
auto timeStamp2 = 0xff00'00ff'ffff'ffff;
{
auto resolution = 135.0;
auto result = static_cast<uint64_t>(timeStamp0 * resolution);
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp0, resolution));
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp1, resolution));
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp2, resolution));
}
{
auto resolution = 128.0;
auto result = static_cast<uint64_t>(timeStamp0 * resolution);
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp0, resolution));
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp1, resolution));
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp2, resolution));
}
{
auto resolution = 127.0;
auto result = static_cast<uint64_t>(timeStamp0 * resolution);
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp0, resolution));
EXPECT_EQ(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp1, resolution));
EXPECT_NE(result, gfxCoreHelper.getGpuTimeStampInNS(timeStamp2, resolution));
}
}
TEST(DwordBuilderTest, WhenSettingNonMaskedBitsThenOnlySelectedBitAreSet) {