Skip to content

Commit 16bd396

Browse files
Adding Implementation of zetKernelGetProfileInfo
Signed-off-by: Tratnack, Geoffrey <[email protected]>
1 parent cf3817e commit 16bd396

File tree

6 files changed

+123
-41
lines changed

6 files changed

+123
-41
lines changed

level_zero/core/source/kernel/kernel_imp.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,12 @@ ze_result_t KernelImp::setCacheConfig(ze_cache_config_flags_t flags) {
10421042
return ZE_RESULT_SUCCESS;
10431043
}
10441044

1045+
ze_result_t KernelImp::getProfileInfo(zet_profile_properties_t *pProfileProperties) {
1046+
pProfileProperties->flags = module->getProfileFlags();
1047+
pProfileProperties->numTokens = 0;
1048+
return ZE_RESULT_SUCCESS;
1049+
}
1050+
10451051
NEO::GraphicsAllocation *KernelImp::getIsaAllocation() const {
10461052
return getImmutableData()->getIsaGraphicsAllocation();
10471053
}

level_zero/core/source/kernel/kernel_imp.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,7 @@ struct KernelImp : Kernel {
146146
return kernelImmData->getDescriptor().kernelAttributes.flags.hasRTCalls;
147147
}
148148

149-
ze_result_t getProfileInfo(zet_profile_properties_t *pProfileProperties) override {
150-
pProfileProperties->flags = 0;
151-
pProfileProperties->numTokens = 0;
152-
return ZE_RESULT_SUCCESS;
153-
}
149+
ze_result_t getProfileInfo(zet_profile_properties_t *pProfileProperties) override;
154150

155151
bool hasIndirectAccess() {
156152
return kernelHasIndirectAccess;

level_zero/core/source/module/module.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ struct Module : _ze_module_handle_t {
5050
virtual uint32_t getMaxGroupSize() const = 0;
5151
virtual bool isDebugEnabled() const = 0;
5252
virtual bool shouldAllocatePrivateMemoryPerDispatch() const = 0;
53+
virtual uint32_t getProfileFlags() const = 0;
5354
virtual void checkIfPrivateMemoryPerDispatchIsNeeded() = 0;
5455

5556
Module() = default;

level_zero/core/source/module/module_imp.cpp

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ NEO::ConstStringRef optLevel = "-ze-opt-level";
5050
NEO::ConstStringRef greaterThan4GbRequired = "-ze-opt-greater-than-4GB-buffer-required";
5151
NEO::ConstStringRef hasBufferOffsetArg = "-ze-intel-has-buffer-offset-arg";
5252
NEO::ConstStringRef debugKernelEnable = "-ze-kernel-debug-enable";
53+
NEO::ConstStringRef profileFlags = "-zet-profile-flags";
5354
} // namespace BuildOptions
5455

5556
ModuleTranslationUnit::ModuleTranslationUnit(L0::Device *device)
@@ -664,17 +665,62 @@ void ModuleImp::createBuildOptions(const char *pBuildFlags, std::string &apiOpti
664665

665666
apiOptions = pBuildFlags;
666667
moveBuildOption(apiOptions, apiOptions, NEO::CompilerOptions::optDisable, BuildOptions::optDisable);
667-
moveBuildOption(apiOptions, apiOptions, NEO::CompilerOptions::optLevel, BuildOptions::optLevel);
668668
moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::greaterThan4gbBuffersRequired, BuildOptions::greaterThan4GbRequired);
669669
moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::allowZebin, NEO::CompilerOptions::allowZebin);
670670

671+
moveOptLevelOption(apiOptions, apiOptions);
672+
moveProfileFlagsOption(apiOptions, apiOptions);
671673
createBuildExtraOptions(apiOptions, internalBuildOptions);
672674
}
673675
if (NEO::ApiSpecificConfig::getBindlessConfiguration()) {
674676
NEO::CompilerOptions::concatenateAppend(internalBuildOptions, NEO::CompilerOptions::bindlessMode.str());
675677
}
676678
}
677679

680+
bool ModuleImp::moveOptLevelOption(std::string &dstOptionsSet, std::string &srcOptionSet) {
681+
const char optDelim = ' ';
682+
const char valDelim = '=';
683+
684+
auto optInSrcPos = srcOptionSet.find(BuildOptions::optLevel.begin());
685+
if (std::string::npos == optInSrcPos) {
686+
return false;
687+
}
688+
689+
std::string dstOptionStr(NEO::CompilerOptions::optLevel);
690+
auto valInSrcPos = srcOptionSet.find(valDelim, optInSrcPos);
691+
auto optInSrcEndPos = srcOptionSet.find(optDelim, optInSrcPos);
692+
if (std::string::npos == valInSrcPos) {
693+
return false;
694+
}
695+
dstOptionStr += srcOptionSet.substr(valInSrcPos + 1, (optInSrcEndPos - (valInSrcPos + 1)));
696+
srcOptionSet.erase(optInSrcPos, (optInSrcEndPos + 1 - optInSrcPos));
697+
NEO::CompilerOptions::concatenateAppend(dstOptionsSet, dstOptionStr);
698+
return true;
699+
}
700+
701+
bool ModuleImp::moveProfileFlagsOption(std::string &dstOptionsSet, std::string &srcOptionSet) {
702+
const char optDelim = ' ';
703+
704+
auto optInSrcPos = srcOptionSet.find(BuildOptions::profileFlags.begin());
705+
if (std::string::npos == optInSrcPos) {
706+
return false;
707+
}
708+
709+
std::string dstOptionStr(BuildOptions::profileFlags);
710+
auto valInSrcPos = srcOptionSet.find(optDelim, optInSrcPos);
711+
auto optInSrcEndPos = srcOptionSet.find(optDelim, valInSrcPos + 1);
712+
if (std::string::npos == valInSrcPos) {
713+
return false;
714+
}
715+
std::string valStr = srcOptionSet.substr(valInSrcPos, (optInSrcEndPos - valInSrcPos));
716+
profileFlags = static_cast<uint32_t>(strtoul(valStr.c_str(), nullptr, 16));
717+
dstOptionStr += valStr;
718+
719+
srcOptionSet.erase(optInSrcPos, (optInSrcEndPos + 1 - optInSrcPos));
720+
NEO::CompilerOptions::concatenateAppend(dstOptionsSet, dstOptionStr);
721+
return true;
722+
}
723+
678724
void ModuleImp::updateBuildLog(NEO::Device *neoDevice) {
679725
if (this->moduleBuildLog) {
680726
moduleBuildLog->appendString(this->translationUnit->buildLog.c_str(), this->translationUnit->buildLog.size());
@@ -1199,25 +1245,13 @@ StackVec<NEO::GraphicsAllocation *, 32> ModuleImp::getModuleAllocations() {
11991245
}
12001246

12011247
bool moveBuildOption(std::string &dstOptionsSet, std::string &srcOptionSet, NEO::ConstStringRef dstOptionName, NEO::ConstStringRef srcOptionName) {
1202-
const char optDelim = ' ';
1203-
const char valDelim = '=';
1204-
12051248
auto optInSrcPos = srcOptionSet.find(srcOptionName.begin());
12061249
if (std::string::npos == optInSrcPos) {
12071250
return false;
12081251
}
12091252

1210-
std::string dstOptionStr(dstOptionName);
1211-
auto optInSrcEndPos = srcOptionSet.find(optDelim, optInSrcPos);
1212-
if (srcOptionName == BuildOptions::optLevel) {
1213-
auto valInSrcPos = srcOptionSet.find(valDelim, optInSrcPos);
1214-
if (std::string::npos == valInSrcPos) {
1215-
return false;
1216-
}
1217-
dstOptionStr += srcOptionSet.substr(valInSrcPos + 1, optInSrcEndPos);
1218-
}
1219-
srcOptionSet.erase(optInSrcPos, (optInSrcEndPos - optInSrcPos));
1220-
NEO::CompilerOptions::concatenateAppend(dstOptionsSet, dstOptionStr);
1253+
srcOptionSet.erase(optInSrcPos, srcOptionName.length());
1254+
NEO::CompilerOptions::concatenateAppend(dstOptionsSet, dstOptionName);
12211255
return true;
12221256
}
12231257

level_zero/core/source/module/module_imp.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ extern NEO::ConstStringRef optLevel;
3030
extern NEO::ConstStringRef greaterThan4GbRequired;
3131
extern NEO::ConstStringRef hasBufferOffsetArg;
3232
extern NEO::ConstStringRef debugKernelEnable;
33+
extern NEO::ConstStringRef profileFlags;
3334
} // namespace BuildOptions
3435

3536
struct ModuleTranslationUnit {
@@ -110,6 +111,8 @@ struct ModuleImp : public Module {
110111

111112
void createBuildOptions(const char *pBuildFlags, std::string &buildOptions, std::string &internalBuildOptions);
112113
void createBuildExtraOptions(std::string &buildOptions, std::string &internalBuildOptions);
114+
bool moveOptLevelOption(std::string &dstOptionsSet, std::string &srcOptionSet);
115+
bool moveProfileFlagsOption(std::string &dstOptionsSet, std::string &srcOptionSet);
113116
void updateBuildLog(NEO::Device *neoDevice);
114117

115118
Device *getDevice() const override { return device; }
@@ -124,6 +127,8 @@ struct ModuleImp : public Module {
124127
return allocatePrivateMemoryPerDispatch;
125128
}
126129

130+
uint32_t getProfileFlags() const override { return profileFlags; }
131+
127132
ModuleTranslationUnit *getTranslationUnit() {
128133
return this->translationUnit.get();
129134
}
@@ -162,6 +167,7 @@ struct ModuleImp : public Module {
162167
NEO::Linker::UnresolvedExternals unresolvedExternalsInfo{};
163168
std::set<NEO::GraphicsAllocation *> importedSymbolAllocations{};
164169
uint32_t debugModuleHandle = 0;
170+
uint32_t profileFlags = 0;
165171

166172
NEO::Linker::PatchableSegments isaSegmentsForPatching;
167173
std::vector<std::vector<char>> patchedIsaTempStorage;

level_zero/core/test/unit_tests/sources/module/test_module.cpp

Lines changed: 60 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2439,27 +2439,6 @@ TEST(BuildOptions, givenSrcOptionNameInSrcNamesWhenMovingBuildOptionsThenOptionI
24392439
EXPECT_EQ(std::string::npos, srcNames.find(NEO::CompilerOptions::optDisable.str()));
24402440
}
24412441

2442-
TEST(BuildOptions, givenSrcOptLevelInSrcNamesWhenMovingBuildOptionsThenOptionIsRemovedFromSrcNamesAndTranslatedOptionsStoredInDstNames) {
2443-
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::optLevel);
2444-
srcNames += "=2";
2445-
std::string dstNames;
2446-
2447-
auto result = moveBuildOption(dstNames, srcNames, NEO::CompilerOptions::optLevel, BuildOptions::optLevel);
2448-
EXPECT_TRUE(result);
2449-
2450-
EXPECT_EQ(NEO::CompilerOptions::optLevel.str() + std::string("2"), dstNames);
2451-
EXPECT_EQ(std::string::npos, srcNames.find(BuildOptions::optLevel.str()));
2452-
EXPECT_EQ(std::string::npos, srcNames.find(std::string("=2")));
2453-
}
2454-
2455-
TEST(BuildOptions, givenSrcOptLevelWithoutLevelIntegerInSrcNamesWhenMovingBuildOptionsThenFalseIsReturned) {
2456-
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::optLevel);
2457-
std::string dstNames;
2458-
2459-
auto result = moveBuildOption(dstNames, srcNames, NEO::CompilerOptions::optLevel, BuildOptions::optLevel);
2460-
EXPECT_FALSE(result);
2461-
}
2462-
24632442
TEST_F(ModuleTest, givenInternalOptionsWhenBindlessEnabledThenBindlesOptionsPassed) {
24642443
DebugManagerStateRestore restorer;
24652444
DebugManager.flags.UseBindlessMode.set(1);
@@ -2502,6 +2481,66 @@ TEST_F(ModuleTest, givenInternalOptionsWhenBindlessDisabledThenBindlesOptionsNot
25022481
EXPECT_FALSE(NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessMode));
25032482
}
25042483

2484+
TEST_F(ModuleTest, givenSrcOptLevelInSrcNamesWhenMovingBuildOptionsThenOptionIsRemovedFromSrcNamesAndTranslatedOptionsStoredInDstNames) {
2485+
auto module = std::make_unique<ModuleImp>(device, nullptr, ModuleType::User);
2486+
ASSERT_NE(nullptr, module);
2487+
2488+
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::optLevel);
2489+
srcNames += "=2";
2490+
std::string dstNames;
2491+
2492+
auto result = module->moveOptLevelOption(dstNames, srcNames);
2493+
EXPECT_TRUE(result);
2494+
2495+
EXPECT_EQ(NEO::CompilerOptions::optLevel.str() + std::string("2"), dstNames);
2496+
EXPECT_EQ(std::string::npos, srcNames.find(BuildOptions::optLevel.str()));
2497+
EXPECT_EQ(std::string::npos, srcNames.find(std::string("=2")));
2498+
}
2499+
2500+
TEST_F(ModuleTest, givenSrcOptLevelWithoutLevelIntegerInSrcNamesWhenMovingBuildOptionsThenFalseIsReturned) {
2501+
auto module = std::make_unique<ModuleImp>(device, nullptr, ModuleType::User);
2502+
ASSERT_NE(nullptr, module);
2503+
2504+
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::optLevel);
2505+
std::string dstNames;
2506+
2507+
auto result = module->moveOptLevelOption(dstNames, srcNames);
2508+
EXPECT_FALSE(result);
2509+
2510+
ASSERT_NE(std::string::npos, srcNames.find(BuildOptions::optLevel.str()));
2511+
EXPECT_EQ(std::string::npos, dstNames.find(NEO::CompilerOptions::optLevel.str()));
2512+
}
2513+
2514+
TEST_F(ModuleTest, givenSrcProfileFlagsInSrcNamesWhenMovingBuildOptionsThenOptionIsRemovedFromSrcNamesAndTranslatedOptionsStoredInDstNames) {
2515+
auto module = std::make_unique<ModuleImp>(device, nullptr, ModuleType::User);
2516+
ASSERT_NE(nullptr, module);
2517+
2518+
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::profileFlags);
2519+
srcNames += " 2";
2520+
std::string dstNames;
2521+
2522+
auto result = module->moveProfileFlagsOption(dstNames, srcNames);
2523+
EXPECT_TRUE(result);
2524+
2525+
EXPECT_EQ(BuildOptions::profileFlags.str() + std::string(" 2"), dstNames);
2526+
EXPECT_EQ(std::string::npos, srcNames.find(BuildOptions::profileFlags.str()));
2527+
EXPECT_EQ(std::string::npos, srcNames.find(std::string(" 2")));
2528+
}
2529+
2530+
TEST_F(ModuleTest, givenSrcProfileFlagsWithoutFlagValueInSrcNamesWhenMovingBuildOptionsThenFalseIsReturned) {
2531+
auto module = std::make_unique<ModuleImp>(device, nullptr, ModuleType::User);
2532+
ASSERT_NE(nullptr, module);
2533+
2534+
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::profileFlags);
2535+
std::string dstNames;
2536+
2537+
auto result = module->moveProfileFlagsOption(dstNames, srcNames);
2538+
EXPECT_FALSE(result);
2539+
2540+
ASSERT_NE(std::string::npos, srcNames.find(BuildOptions::profileFlags.str()));
2541+
EXPECT_EQ(std::string::npos, dstNames.find(BuildOptions::profileFlags.str()));
2542+
}
2543+
25052544
TEST_F(ModuleTest, GivenInjectInternalBuildOptionsWhenBuildingUserModuleThenInternalOptionsAreAppended) {
25062545
DebugManagerStateRestore dbgRestorer;
25072546
DebugManager.flags.InjectInternalBuildOptions.set(" -abc");

0 commit comments

Comments
 (0)