Skip to content

Commit 5306205

Browse files
performance: Enable wait pkg for ULLS light
Related-To: NEO-13922 Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
1 parent 413194b commit 5306205

File tree

6 files changed

+66
-26
lines changed

6 files changed

+66
-26
lines changed

shared/source/command_stream/command_stream_receiver_hw_base.inl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "shared/source/os_interface/os_context.h"
4646
#include "shared/source/os_interface/product_helper.h"
4747
#include "shared/source/utilities/tag_allocator.h"
48+
#include "shared/source/utilities/wait_util.h"
4849

4950
#include "command_stream_receiver_hw_ext.inl"
5051

@@ -1429,6 +1430,7 @@ inline bool CommandStreamReceiverHw<GfxFamily>::initDirectSubmission() {
14291430
this->osContext->setDirectSubmissionActive();
14301431
if (this->osContext->isDirectSubmissionLightActive()) {
14311432
this->pushAllocationsForMakeResident = false;
1433+
WaitUtils::init(true);
14321434
}
14331435
}
14341436
}

shared/source/execution_environment/execution_environment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
namespace NEO {
3232
ExecutionEnvironment::ExecutionEnvironment() {
33-
WaitUtils::init();
33+
WaitUtils::init(false);
3434
this->configureNeoEnvironment();
3535
}
3636

shared/source/utilities/wait_util.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2021-2024 Intel Corporation
2+
* Copyright (C) 2021-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -16,7 +16,6 @@ namespace WaitUtils {
1616

1717
constexpr uint64_t defaultCounterValue = 10000;
1818
constexpr uint32_t defaultControlValue = 0;
19-
constexpr bool defaultEnableWaitPkg = false;
2019

2120
uint64_t waitpkgCounterValue = defaultCounterValue;
2221
uint32_t waitpkgControlValue = defaultControlValue;
@@ -30,13 +29,16 @@ bool waitpkgSupport = false;
3029
#endif
3130
bool waitpkgUse = false;
3231

33-
void init() {
34-
bool enableWaitPkg = defaultEnableWaitPkg;
35-
int32_t overrideEnableWaitPkg = debugManager.flags.EnableWaitpkg.get();
36-
if (overrideEnableWaitPkg != -1) {
37-
enableWaitPkg = !!(overrideEnableWaitPkg);
32+
void init(bool enable) {
33+
if (waitpkgUse) {
34+
return;
3835
}
39-
if (enableWaitPkg && waitpkgSupport) {
36+
37+
if (debugManager.flags.EnableWaitpkg.get() != -1) {
38+
enable = debugManager.flags.EnableWaitpkg.get();
39+
}
40+
41+
if (enable && waitpkgSupport) {
4042
if (CpuInfo::getInstance().isFeatureSupported(CpuInfo::featureWaitPkg)) {
4143
waitpkgUse = true;
4244
waitCount = 0;
@@ -47,6 +49,7 @@ void init() {
4749
if (overrideWaitPkgCounter != -1) {
4850
waitpkgCounterValue = static_cast<uint64_t>(overrideWaitPkgCounter);
4951
}
52+
5053
int32_t overrideWaitPkgControl = debugManager.flags.WaitpkgControlValue.get();
5154
if (overrideWaitPkgControl != -1) {
5255
waitpkgControlValue = static_cast<uint32_t>(overrideWaitPkgControl);

shared/source/utilities/wait_util.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2021-2024 Intel Corporation
2+
* Copyright (C) 2021-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -59,7 +59,7 @@ inline bool waitFunction(volatile TagAddressType *pollAddress, TaskCountType exp
5959
return waitFunctionWithPredicate<TaskCountType>(pollAddress, expectedValue, std::greater_equal<TaskCountType>());
6060
}
6161

62-
void init();
62+
void init(bool enable);
6363
} // namespace WaitUtils
6464

6565
} // namespace NEO

shared/test/unit_test/utilities/wait_util_tests.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2021-2024 Intel Corporation
2+
* Copyright (C) 2021-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -35,7 +35,7 @@ using WaitPredicateOnlyTest = Test<WaitPredicateOnlyFixture>;
3535
TEST_F(WaitPredicateOnlyTest, givenDefaultSettingsWhenNoPollAddressProvidedThenPauseDefaultTimeAndReturnFalse) {
3636
EXPECT_EQ(1u, WaitUtils::defaultWaitCount);
3737

38-
WaitUtils::init();
38+
WaitUtils::init(false);
3939
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
4040

4141
uint32_t oldCount = CpuIntrinsicsTests::pauseCounter.load();
@@ -48,7 +48,7 @@ TEST_F(WaitPredicateOnlyTest, givenDebugFlagOverridesWhenNoPollAddressProvidedTh
4848
uint32_t count = 10u;
4949
debugManager.flags.WaitLoopCount.set(count);
5050

51-
WaitUtils::init();
51+
WaitUtils::init(false);
5252
EXPECT_EQ(count, WaitUtils::waitCount);
5353

5454
uint32_t oldCount = CpuIntrinsicsTests::pauseCounter.load();
@@ -58,7 +58,7 @@ TEST_F(WaitPredicateOnlyTest, givenDebugFlagOverridesWhenNoPollAddressProvidedTh
5858
}
5959

6060
TEST_F(WaitPredicateOnlyTest, givenDefaultSettingsWhenPollAddressProvidedDoesNotMeetCriteriaThenPauseDefaultTimeAndReturnFalse) {
61-
WaitUtils::init();
61+
WaitUtils::init(false);
6262
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
6363

6464
volatile TagAddressType pollValue = 1u;
@@ -71,7 +71,7 @@ TEST_F(WaitPredicateOnlyTest, givenDefaultSettingsWhenPollAddressProvidedDoesNot
7171
}
7272

7373
TEST_F(WaitPredicateOnlyTest, givenDefaultSettingsWhenPollAddressProvidedMeetsCriteriaThenPauseDefaultTimeAndReturnTrue) {
74-
WaitUtils::init();
74+
WaitUtils::init(false);
7575
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
7676

7777
volatile TagAddressType pollValue = 3u;
@@ -87,7 +87,7 @@ TEST_F(WaitPredicateOnlyTest, givenDebugFlagSetZeroWhenPollAddressProvidedMeetsC
8787
uint32_t count = 0u;
8888
debugManager.flags.WaitLoopCount.set(count);
8989

90-
WaitUtils::init();
90+
WaitUtils::init(false);
9191
EXPECT_EQ(count, WaitUtils::waitCount);
9292

9393
volatile TagAddressType pollValue = 3u;

shared/test/unit_test/utilities/x86_64/wait_util_tests_x86_64.cpp

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2023-2024 Intel Corporation
2+
* Copyright (C) 2023-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -89,7 +89,7 @@ struct WaitPkgEnabledFixture : public WaitPkgFixture {
8989
CpuInfo::cpuidFunc = mockCpuidEnableAll;
9090
WaitUtils::waitpkgSupport = true;
9191

92-
WaitUtils::init();
92+
WaitUtils::init(false);
9393

9494
CpuIntrinsicsTests::lastUmwaitCounter = 0;
9595
CpuIntrinsicsTests::lastUmwaitControl = 0;
@@ -123,7 +123,7 @@ TEST_F(WaitPkgTest, givenDefaultSettingsAndWaitpkgSupportTrueWhenWaitInitialized
123123

124124
WaitUtils::waitpkgSupport = true;
125125

126-
WaitUtils::init();
126+
WaitUtils::init(false);
127127
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
128128
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
129129
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
@@ -135,7 +135,7 @@ TEST_F(WaitPkgTest, givenEnabledWaitPkgSettingsAndWaitpkgSupportFalseWhenWaitIni
135135

136136
debugManager.flags.EnableWaitpkg.set(1);
137137

138-
WaitUtils::init();
138+
WaitUtils::init(false);
139139
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
140140
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
141141
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
@@ -147,7 +147,7 @@ TEST_F(WaitPkgTest, givenDisabledWaitPkgSettingsAndWaitpkgSupportTrueWhenWaitIni
147147

148148
debugManager.flags.EnableWaitpkg.set(0);
149149

150-
WaitUtils::init();
150+
WaitUtils::init(false);
151151
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
152152
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
153153
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
@@ -161,7 +161,7 @@ TEST_F(WaitPkgTest, givenEnabledWaitPkgSettingsAndWaitpkgSupportTrueWhenWaitInit
161161

162162
debugManager.flags.EnableWaitpkg.set(1);
163163

164-
WaitUtils::init();
164+
WaitUtils::init(false);
165165
EXPECT_EQ(WaitUtils::defaultWaitCount, WaitUtils::waitCount);
166166
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
167167
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
@@ -175,7 +175,20 @@ TEST_F(WaitPkgTest, givenEnabledWaitPkgSettingsAndWaitpkgSupportTrueWhenWaitInit
175175

176176
debugManager.flags.EnableWaitpkg.set(1);
177177

178-
WaitUtils::init();
178+
WaitUtils::init(false);
179+
180+
EXPECT_EQ(0u, WaitUtils::waitCount);
181+
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
182+
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
183+
EXPECT_TRUE(WaitUtils::waitpkgUse);
184+
}
185+
186+
TEST_F(WaitPkgTest, givenEnabledSetToTrueAndWaitpkgSupportTrueWhenWaitInitializedAndCpuSupportsOperandThenWaitPkgEnabled) {
187+
CpuInfo::cpuidFunc = mockCpuidEnableAll;
188+
189+
WaitUtils::waitpkgSupport = true;
190+
191+
WaitUtils::init(true);
179192

180193
EXPECT_EQ(0u, WaitUtils::waitCount);
181194
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
@@ -191,7 +204,7 @@ TEST_F(WaitPkgTest, givenFullyEnabledWaitPkgAndOverrideCounterValueWhenWaitIniti
191204
debugManager.flags.EnableWaitpkg.set(1);
192205
debugManager.flags.WaitpkgCounterValue.set(1234);
193206

194-
WaitUtils::init();
207+
WaitUtils::init(false);
195208
EXPECT_EQ(0u, WaitUtils::waitCount);
196209
EXPECT_EQ(1234u, WaitUtils::waitpkgCounterValue);
197210
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
@@ -206,13 +219,35 @@ TEST_F(WaitPkgTest, givenFullyEnabledWaitPkgAndOverrideControlValueWhenWaitIniti
206219
debugManager.flags.EnableWaitpkg.set(1);
207220
debugManager.flags.WaitpkgControlValue.set(1);
208221

209-
WaitUtils::init();
222+
WaitUtils::init(false);
210223
EXPECT_EQ(0u, WaitUtils::waitCount);
211224
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
212225
EXPECT_EQ(1u, WaitUtils::waitpkgControlValue);
213226
EXPECT_TRUE(WaitUtils::waitpkgUse);
214227
}
215228

229+
TEST_F(WaitPkgTest, givenEnabledWaitPkgSettingsAndWaitpkgSupportTrueWhenWaitInitializedTwiceThenInitOnce) {
230+
CpuInfo::cpuidFunc = mockCpuidEnableAll;
231+
232+
WaitUtils::waitpkgSupport = true;
233+
234+
WaitUtils::init(true);
235+
236+
EXPECT_EQ(0u, WaitUtils::waitCount);
237+
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
238+
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
239+
EXPECT_TRUE(WaitUtils::waitpkgUse);
240+
241+
debugManager.flags.WaitpkgControlValue.set(1);
242+
243+
WaitUtils::init(true);
244+
245+
EXPECT_EQ(0u, WaitUtils::waitCount);
246+
EXPECT_EQ(10000u, WaitUtils::waitpkgCounterValue);
247+
EXPECT_EQ(0u, WaitUtils::waitpkgControlValue);
248+
EXPECT_TRUE(WaitUtils::waitpkgUse);
249+
}
250+
216251
TEST_F(WaitPkgEnabledTest, givenMonitoredAddressChangedWhenAddressMatchesPredicateValueThenWaitReturnsTrue) {
217252
volatile TagAddressType pollValue = 0u;
218253
TaskCountType expectedValue = 1;

0 commit comments

Comments
 (0)