Skip to content

Commit 4ffe456

Browse files
Add PrintOsContextInitializations debug flag
Signed-off-by: Maciej Dziuban <[email protected]>
1 parent fa944d2 commit 4ffe456

File tree

10 files changed

+139
-16
lines changed

10 files changed

+139
-16
lines changed

opencl/test/unit_test/os_interface/os_context_tests.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,15 @@ struct DeferredOsContextCreationTests : ::testing::Test {
5353
DeviceFactory::prepareDeviceEnvironments(*device->getExecutionEnvironment());
5454
}
5555

56-
void expectContextCreation(EngineTypeUsage engineTypeUsage, bool defaultEngine, bool expectedImmediate) {
56+
std::unique_ptr<OsContext> createOsContext(EngineTypeUsage engineTypeUsage, bool defaultEngine) {
5757
OSInterface *osInterface = device->getRootDeviceEnvironment().osInterface.get();
5858
std::unique_ptr<OsContext> osContext{OsContext::create(osInterface, 0, 0, engineTypeUsage, PreemptionMode::Disabled, false)};
5959
EXPECT_FALSE(osContext->isInitialized());
60+
return osContext;
61+
}
6062

63+
void expectContextCreation(EngineTypeUsage engineTypeUsage, bool defaultEngine, bool expectedImmediate) {
64+
auto osContext = createOsContext(engineTypeUsage, defaultEngine);
6165
const bool immediate = osContext->isImmediateContextInitializationEnabled(defaultEngine);
6266
EXPECT_EQ(expectedImmediate, immediate);
6367
if (immediate) {
@@ -141,3 +145,18 @@ TEST_F(DeferredOsContextCreationTests, givenEnsureContextInitializeCalledMultipl
141145
EXPECT_TRUE(osContext.isInitialized());
142146
EXPECT_EQ(1u, osContext.initializeContextCalled);
143147
}
148+
149+
TEST_F(DeferredOsContextCreationTests, givenPrintOsContextInitializationsIsSetWhenOsContextItIsInitializedThenInfoIsLoggedToStdout) {
150+
DebugManagerStateRestore restore{};
151+
DebugManager.flags.DeferOsContextInitialization.set(1);
152+
DebugManager.flags.PrintOsContextInitializations.set(1);
153+
testing::internal::CaptureStdout();
154+
155+
auto osContext = createOsContext(engineTypeUsageRegular, false);
156+
EXPECT_EQ(std::string{}, testing::internal::GetCapturedStdout());
157+
158+
testing::internal::CaptureStdout();
159+
osContext->ensureContextInitialized();
160+
std::string expectedMessage = "OsContext initialization: contextId=0 usage=Regular type=RCS isRootDevice=0\n";
161+
EXPECT_EQ(expectedMessage, testing::internal::GetCapturedStdout());
162+
}

opencl/test/unit_test/test_files/igdrcl.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ UseBindlessDebugSip = 0
233233
OverrideSlmAllocationSize = -1
234234
OverrideSlmSize = -1
235235
UseCyclesPerSecondTimer = 0
236+
PrintOsContextInitializations = 0
236237
WaitLoopCount = -1
237238
DebuggerLogBitmask = 0
238239
GTPinAllocateBufferInSharedMemory = -1

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideTimestampPacketSize, -1, "-1: default, >
101101

102102
/*LOGGING FLAGS*/
103103
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")
104+
DECLARE_DEBUG_VARIABLE(bool, PrintOsContextInitializations, false, "print initialized OsContexts to standard output")
104105
DECLARE_DEBUG_VARIABLE(bool, PrintDeviceAndEngineIdOnSubmission, false, "print submissions device and engine IDs to standard output")
105106
DECLARE_DEBUG_VARIABLE(bool, PrintExecutionBuffer, false, "print execution buffer information to standard output")
106107
DECLARE_DEBUG_VARIABLE(bool, PrintBOsForSubmit, false, "print all BOs passed to submission")

shared/source/helpers/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ set(NEO_CORE_HELPERS
3636
${CMAKE_CURRENT_SOURCE_DIR}/dirty_state_helpers.cpp
3737
${CMAKE_CURRENT_SOURCE_DIR}/dirty_state_helpers.h
3838
${CMAKE_CURRENT_SOURCE_DIR}/engine_control.h
39-
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/engine_node_helper.cpp
39+
${CMAKE_CURRENT_SOURCE_DIR}/engine_node_helper.cpp
40+
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/engine_node_helper_extra.cpp
4041
${CMAKE_CURRENT_SOURCE_DIR}/engine_node_helper.h
4142
${CMAKE_CURRENT_SOURCE_DIR}/extendable_enum.h
4243
${CMAKE_CURRENT_SOURCE_DIR}/file_io.cpp
Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,41 @@
11
/*
2-
* Copyright (C) 2019-2020 Intel Corporation
2+
* Copyright (C) 2019-2021 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
66
*/
77

88
#include "shared/source/helpers/engine_node_helper.h"
99

10-
namespace NEO {
11-
namespace EngineHelpers {
12-
bool isCcs(aub_stream::EngineType engineType) {
13-
return engineType == aub_stream::ENGINE_CCS;
14-
}
10+
namespace NEO::EngineHelpers {
1511

16-
bool isBcs(aub_stream::EngineType engineType) {
17-
return engineType == aub_stream::ENGINE_BCS;
12+
std::string engineUsageToString(EngineUsage usage) {
13+
switch (usage) {
14+
case EngineUsage::Regular:
15+
return "Regular";
16+
case EngineUsage::LowPriority:
17+
return "LowPriority";
18+
case EngineUsage::Internal:
19+
return "Internal";
20+
default:
21+
return "Unknown";
22+
}
1823
}
1924

20-
aub_stream::EngineType getBcsEngineType(const HardwareInfo &hwInfo, std::atomic<uint32_t> &selectorCopyEngine) {
21-
return aub_stream::EngineType::ENGINE_BCS;
25+
std::string engineTypeToString(aub_stream::EngineType engineType) {
26+
switch (engineType) {
27+
case aub_stream::EngineType::ENGINE_RCS:
28+
return "RCS";
29+
case aub_stream::EngineType::ENGINE_BCS:
30+
return "BCS";
31+
case aub_stream::EngineType::ENGINE_VCS:
32+
return "VCS";
33+
case aub_stream::EngineType::ENGINE_VECS:
34+
return "VECS";
35+
case aub_stream::EngineType::ENGINE_CCS:
36+
return "CCS";
37+
default:
38+
return engineTypeToStringAdditional(engineType);
39+
}
2240
}
23-
} // namespace EngineHelpers
24-
} // namespace NEO
41+
} // namespace NEO::EngineHelpers

shared/source/helpers/engine_node_helper.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2019-2020 Intel Corporation
2+
* Copyright (C) 2019-2021 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -10,6 +10,7 @@
1010
#include "engine_node.h"
1111

1212
#include <atomic>
13+
#include <string>
1314
#include <utility>
1415

1516
namespace NEO {
@@ -18,7 +19,9 @@ struct HardwareInfo;
1819
enum class EngineUsage : uint32_t {
1920
Regular,
2021
LowPriority,
21-
Internal
22+
Internal,
23+
24+
EngineUsageCount,
2225
};
2326

2427
using EngineTypeUsage = std::pair<aub_stream::EngineType, EngineUsage>;
@@ -27,5 +30,10 @@ namespace EngineHelpers {
2730
bool isCcs(aub_stream::EngineType engineType);
2831
bool isBcs(aub_stream::EngineType engineType);
2932
aub_stream::EngineType getBcsEngineType(const HardwareInfo &hwInfo, std::atomic<uint32_t> &selectorCopyEngine);
33+
34+
std::string engineTypeToString(aub_stream::EngineType engineType);
35+
std::string engineTypeToStringAdditional(aub_stream::EngineType engineType);
36+
std::string engineUsageToString(EngineUsage usage);
37+
3038
}; // namespace EngineHelpers
3139
} // namespace NEO
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright (C) 2021 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "shared/source/helpers/engine_node_helper.h"
9+
10+
namespace NEO {
11+
namespace EngineHelpers {
12+
bool isCcs(aub_stream::EngineType engineType) {
13+
return engineType == aub_stream::ENGINE_CCS;
14+
}
15+
16+
bool isBcs(aub_stream::EngineType engineType) {
17+
return engineType == aub_stream::ENGINE_BCS;
18+
}
19+
20+
aub_stream::EngineType getBcsEngineType(const HardwareInfo &hwInfo, std::atomic<uint32_t> &selectorCopyEngine) {
21+
return aub_stream::EngineType::ENGINE_BCS;
22+
}
23+
24+
std::string engineTypeToStringAdditional(aub_stream::EngineType engineType) {
25+
return "Unknown";
26+
}
27+
28+
} // namespace EngineHelpers
29+
} // namespace NEO

shared/source/os_interface/os_context.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ bool OsContext::isImmediateContextInitializationEnabled(bool isDefaultEngine) co
4040

4141
void OsContext::ensureContextInitialized() {
4242
std::call_once(contextInitializedFlag, [this] {
43+
if (DebugManager.flags.PrintOsContextInitializations.get()) {
44+
printf("OsContext initialization: contextId=%d usage=%s type=%s isRootDevice=%d\n",
45+
contextId,
46+
EngineHelpers::engineUsageToString(engineUsage).c_str(),
47+
EngineHelpers::engineTypeToString(engineType).c_str(),
48+
static_cast<int>(rootDevice));
49+
}
50+
4351
initializeContext();
4452
contextInitialized = true;
4553
});

shared/test/common/helpers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ set(NEO_CORE_HELPERS_TESTS
1515
${CMAKE_CURRENT_SOURCE_DIR}/default_hw_info.h
1616
${CMAKE_CURRENT_SOURCE_DIR}/default_hw_info.inl
1717
${CMAKE_CURRENT_SOURCE_DIR}/dispatch_flags_helper.h
18+
${CMAKE_CURRENT_SOURCE_DIR}/engine_node_helper_tests.cpp
1819
${CMAKE_CURRENT_SOURCE_DIR}/file_io_tests.cpp
1920
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/hw_helper_extended_tests.cpp
2021
${CMAKE_CURRENT_SOURCE_DIR}/hash_tests.cpp
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (C) 2021 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "shared/source/helpers/engine_node_helper.h"
9+
10+
#include "test.h"
11+
12+
using namespace NEO;
13+
14+
TEST(EngineNodeHelperTests, givenValidEngineUsageWhenGettingStringRepresentationThenItIsCorrect) {
15+
EXPECT_EQ(std::string{"Regular"}, EngineHelpers::engineUsageToString(EngineUsage::Regular));
16+
EXPECT_EQ(std::string{"Internal"}, EngineHelpers::engineUsageToString(EngineUsage::Internal));
17+
EXPECT_EQ(std::string{"LowPriority"}, EngineHelpers::engineUsageToString(EngineUsage::LowPriority));
18+
}
19+
20+
TEST(EngineNodeHelperTests, givenInValidEngineUsageWhenGettingStringRepresentationThenReturnUnknown) {
21+
EXPECT_EQ(std::string{"Unknown"}, EngineHelpers::engineUsageToString(EngineUsage::EngineUsageCount));
22+
EXPECT_EQ(std::string{"Unknown"}, EngineHelpers::engineUsageToString(static_cast<EngineUsage>(0xcc)));
23+
}
24+
25+
TEST(EngineNodeHelperTests, givenValidEngineTypeWhenGettingStringRepresentationThenItIsCorrect) {
26+
#define CHECK_ENGINE(type) EXPECT_EQ(std::string{#type}, EngineHelpers::engineTypeToString(aub_stream::EngineType::ENGINE_##type))
27+
CHECK_ENGINE(RCS);
28+
CHECK_ENGINE(BCS);
29+
CHECK_ENGINE(VCS);
30+
CHECK_ENGINE(VECS);
31+
CHECK_ENGINE(CCS);
32+
#undef CHECK_ENGINE
33+
}
34+
35+
TEST(EngineNodeHelperTests, givenInvalidEngineTypeWhenGettingStringRepresentationThenItIsCorrect) {
36+
EXPECT_EQ(std::string{"Unknown"}, EngineHelpers::engineTypeToString(aub_stream::EngineType::NUM_ENGINES));
37+
EXPECT_EQ(std::string{"Unknown"}, EngineHelpers::engineTypeToString(static_cast<aub_stream::EngineType>(0xcc)));
38+
}

0 commit comments

Comments
 (0)