mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-25 05:24:02 +08:00
performance: set 1ms ULLS timeout on Windows since Xe2
Related-To: NEO-13843 Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
763fe6ff86
commit
558752288f
@@ -14,7 +14,6 @@
|
||||
#include "shared/source/os_interface/os_context.h"
|
||||
#include "shared/source/os_interface/os_thread.h"
|
||||
#include "shared/source/os_interface/os_time.h"
|
||||
#include "shared/source/os_interface/product_helper.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
@@ -45,7 +44,7 @@ DirectSubmissionController::~DirectSubmissionController() {
|
||||
void DirectSubmissionController::registerDirectSubmission(CommandStreamReceiver *csr) {
|
||||
std::lock_guard<std::mutex> lock(directSubmissionsMutex);
|
||||
directSubmissions.insert(std::make_pair(csr, DirectSubmissionState()));
|
||||
csr->getProductHelper().overrideDirectSubmissionTimeouts(this->timeout, this->maxTimeout);
|
||||
this->overrideDirectSubmissionTimeouts(csr->getProductHelper());
|
||||
}
|
||||
|
||||
void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceiver *csr) {
|
||||
|
||||
@@ -89,6 +89,7 @@ class DirectSubmissionController {
|
||||
bool isDirectSubmissionIdle(CommandStreamReceiver *csr, std::unique_lock<std::recursive_mutex> &csrLock);
|
||||
MOCKABLE_VIRTUAL bool sleep(std::unique_lock<std::mutex> &lock);
|
||||
MOCKABLE_VIRTUAL SteadyClock::time_point getCpuTimestamp();
|
||||
MOCKABLE_VIRTUAL void overrideDirectSubmissionTimeouts(const ProductHelper &productHelper);
|
||||
|
||||
void recalculateTimeout();
|
||||
void applyTimeoutForAcLineStatusAndThrottle(bool acLineConnected);
|
||||
@@ -116,7 +117,6 @@ class DirectSubmissionController {
|
||||
int32_t timeoutDivisor = 1;
|
||||
int32_t bcsTimeoutDivisor = 1;
|
||||
QueueThrottle lowestThrottleSubmitted = QueueThrottle::HIGH;
|
||||
bool adjustTimeoutOnThrottleAndAcLineStatus = false;
|
||||
bool isCsrIdleDetectionEnabled = false;
|
||||
|
||||
std::condition_variable condVar;
|
||||
|
||||
@@ -13,4 +13,8 @@ namespace NEO {
|
||||
bool DirectSubmissionController::sleep(std::unique_lock<std::mutex> &lock) {
|
||||
return NEO::waitOnConditionWithPredicate(condVar, lock, getSleepValue(), [&] { return !pagingFenceRequests.empty(); });
|
||||
}
|
||||
|
||||
void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) {
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "shared/source/direct_submission/direct_submission_controller.h"
|
||||
#include "shared/source/helpers/sleep.h"
|
||||
#include "shared/source/os_interface/product_helper.h"
|
||||
#include "shared/source/os_interface/windows/sys_calls_winmm.h"
|
||||
|
||||
#include <chrono>
|
||||
@@ -17,4 +18,9 @@ bool DirectSubmissionController::sleep(std::unique_lock<std::mutex> &lock) {
|
||||
SysCalls::timeEndPeriod(1u);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
void DirectSubmissionController::overrideDirectSubmissionTimeouts(const ProductHelper &productHelper) {
|
||||
productHelper.overrideDirectSubmissionTimeouts(this->timeout, this->maxTimeout);
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
@@ -971,10 +971,6 @@ uint32_t ProductHelperHw<gfxProduct>::adjustMaxThreadsPerThreadGroup(uint32_t ma
|
||||
return maxThreadsPerThreadGroup;
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
bool ProductHelperHw<gfxProduct>::isMisalignedUserPtr2WayCoherent() const {
|
||||
return false;
|
||||
|
||||
@@ -66,4 +66,8 @@ bool ProductHelperHw<gfxProduct>::isPidFdOrSocketForIpcSupported() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -69,4 +69,16 @@ bool ProductHelperHw<gfxProduct>::isPidFdOrSocketForIpcSupported() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
|
||||
timeout = std::chrono::microseconds{1'000};
|
||||
maxTimeout = std::chrono::microseconds{1'000};
|
||||
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
|
||||
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
|
||||
}
|
||||
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
|
||||
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -21,17 +21,5 @@ bool ProductHelperHw<gfxProduct>::restartDirectSubmissionForHostptrFree() const
|
||||
return true;
|
||||
}
|
||||
|
||||
template <>
|
||||
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
|
||||
timeout = std::chrono::microseconds{1'000};
|
||||
maxTimeout = std::chrono::microseconds{1'000};
|
||||
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
|
||||
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
|
||||
}
|
||||
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
|
||||
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
|
||||
}
|
||||
}
|
||||
|
||||
template class ProductHelperHw<gfxProduct>;
|
||||
} // namespace NEO
|
||||
|
||||
@@ -16,18 +16,6 @@ constexpr static auto gfxProduct = IGFX_PTL;
|
||||
|
||||
namespace NEO {
|
||||
|
||||
template <>
|
||||
void ProductHelperHw<gfxProduct>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
|
||||
timeout = std::chrono::microseconds{1'000};
|
||||
maxTimeout = std::chrono::microseconds{1'000};
|
||||
if (debugManager.flags.DirectSubmissionControllerTimeout.get() != -1) {
|
||||
timeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerTimeout.get()};
|
||||
}
|
||||
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
|
||||
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
|
||||
}
|
||||
}
|
||||
|
||||
template class ProductHelperHw<gfxProduct>;
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -488,6 +488,10 @@ bool ProductHelperHw<IGFX_UNKNOWN>::isPidFdOrSocketForIpcSupported() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <>
|
||||
void ProductHelperHw<IGFX_UNKNOWN>::overrideDirectSubmissionTimeouts(std::chrono::microseconds &timeout, std::chrono::microseconds &maxTimeout) const {
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
#include "shared/source/os_interface/product_helper.inl"
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
|
||||
namespace NEO {
|
||||
struct DirectSubmissionControllerMock : public DirectSubmissionController {
|
||||
using DirectSubmissionController::adjustTimeoutOnThrottleAndAcLineStatus;
|
||||
using DirectSubmissionController::bcsTimeoutDivisor;
|
||||
using DirectSubmissionController::checkNewSubmissions;
|
||||
using DirectSubmissionController::condVarMutex;
|
||||
|
||||
@@ -238,26 +238,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenIncreas
|
||||
controller.unregisterDirectSubmission(&csr);
|
||||
}
|
||||
|
||||
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) {
|
||||
MockExecutionEnvironment executionEnvironment;
|
||||
executionEnvironment.prepareRootDeviceEnvironments(1);
|
||||
executionEnvironment.initializeMemoryManager();
|
||||
DeviceBitfield deviceBitfield(1);
|
||||
|
||||
MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield);
|
||||
std::unique_ptr<OsContext> osContext(OsContext::create(nullptr, 0, 0,
|
||||
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::regular},
|
||||
PreemptionMode::ThreadGroup, deviceBitfield)));
|
||||
csr.setupContext(*osContext.get());
|
||||
|
||||
DirectSubmissionControllerMock controller;
|
||||
auto timeout = std::chrono::microseconds{5'000};
|
||||
EXPECT_EQ(controller.timeout, timeout);
|
||||
controller.registerDirectSubmission(&csr);
|
||||
csr.getProductHelper().overrideDirectSubmissionTimeouts(timeout, timeout);
|
||||
EXPECT_EQ(controller.timeout, timeout);
|
||||
}
|
||||
|
||||
TEST(DirectSubmissionControllerTests, givenPowerSavingUintWhenCallingGetThrottleFromPowerSavingUintThenCorrectValueIsReturned) {
|
||||
EXPECT_EQ(QueueThrottle::MEDIUM, getThrottleFromPowerSavingUint(0u));
|
||||
EXPECT_EQ(QueueThrottle::LOW, getThrottleFromPowerSavingUint(1u));
|
||||
|
||||
@@ -1333,4 +1333,18 @@ HWTEST2_F(WddmDirectSubmissionTest, givenRelaxedOrderingSchedulerRequiredWhenAsk
|
||||
EXPECT_EQ(expectedBaseEndSize + directSubmission.getSizeDispatchRelaxedOrderingQueueStall(), directSubmission.getSizeEnd(true));
|
||||
EXPECT_EQ(expectedBaseEndSize, directSubmission.getSizeEnd(false));
|
||||
}
|
||||
|
||||
HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionControllerWhenRegisterCsrsThenTimeoutIsAdjusted) {
|
||||
auto csr = device->getDefaultEngine().commandStreamReceiver;
|
||||
|
||||
DirectSubmissionControllerMock controller;
|
||||
auto timeout = std::chrono::microseconds{5'000};
|
||||
EXPECT_EQ(controller.timeout, timeout);
|
||||
controller.registerDirectSubmission(csr);
|
||||
csr->getProductHelper().overrideDirectSubmissionTimeouts(timeout, timeout);
|
||||
EXPECT_EQ(controller.timeout, timeout);
|
||||
|
||||
controller.unregisterDirectSubmission(csr);
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -1145,6 +1145,32 @@ HWTEST2_F(ProductHelperTest, givenProductHelperThenCompressionIsNotForbidden, Is
|
||||
EXPECT_FALSE(productHelper->isCompressionForbidden(hwInfo));
|
||||
}
|
||||
|
||||
HWTEST2_F(ProductHelperTest, givenProductHelperBeforeXe2WhenOverrideDirectSubmissionTimeoutsThenTimeoutsNotAdjusted, IsBeforeXe2HpgCore) {
|
||||
DebugManagerStateRestore restorer;
|
||||
|
||||
std::chrono::microseconds timeout{5000};
|
||||
std::chrono::microseconds maxTimeout{5000};
|
||||
productHelper->overrideDirectSubmissionTimeouts(timeout, maxTimeout);
|
||||
EXPECT_EQ(std::chrono::microseconds{5000}, timeout);
|
||||
EXPECT_EQ(std::chrono::microseconds{5000}, maxTimeout);
|
||||
}
|
||||
|
||||
HWTEST2_F(ProductHelperTest, givenProductHelperWhenOverrideDirectSubmissionTimeoutsThenTimeoutsAdjusted, IsAtLeastXe2HpgCore) {
|
||||
DebugManagerStateRestore restorer;
|
||||
|
||||
std::chrono::microseconds timeout{5000};
|
||||
std::chrono::microseconds maxTimeout{5000};
|
||||
productHelper->overrideDirectSubmissionTimeouts(timeout, maxTimeout);
|
||||
EXPECT_EQ(std::chrono::microseconds{1000}, timeout);
|
||||
EXPECT_EQ(std::chrono::microseconds{1000}, maxTimeout);
|
||||
|
||||
debugManager.flags.DirectSubmissionControllerTimeout.set(10000);
|
||||
debugManager.flags.DirectSubmissionControllerMaxTimeout.set(10000);
|
||||
productHelper->overrideDirectSubmissionTimeouts(timeout, maxTimeout);
|
||||
EXPECT_EQ(std::chrono::microseconds{10000}, timeout);
|
||||
EXPECT_EQ(std::chrono::microseconds{10000}, maxTimeout);
|
||||
}
|
||||
|
||||
HWTEST_F(ProductHelperTest, givenProductHelperWhenQueryIsPostImageWriteFlushRequiredThenFalseReturned) {
|
||||
EXPECT_FALSE(productHelper->isPostImageWriteFlushRequired());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user