update scheduling core type value (#17771)

* update scheduling core type value

* update for comments

* update for comments

* fix code style issue
This commit is contained in:
Wanglei Shen 2023-06-06 22:14:40 +08:00 committed by GitHub
parent 2ec9fe915c
commit 4ca8d40e43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 16 deletions

View File

@ -10,35 +10,37 @@
namespace ov {
namespace intel_cpu {
std::vector<std::vector<int>> apply_scheduling_core_type(const ov::hint::SchedulingCoreType input_type,
std::vector<std::vector<int>> apply_scheduling_core_type(ov::hint::SchedulingCoreType& input_type,
const std::vector<std::vector<int>>& proc_type_table) {
std::vector<std::vector<int>> result_table = proc_type_table;
switch (input_type) {
case ov::hint::SchedulingCoreType::ANY_CORE:
break;
case ov::hint::SchedulingCoreType::PCORE_ONLY:
if (proc_type_table[0][EFFICIENT_CORE_PROC] > 0) {
auto update_proc_type_table = [&]() {
switch (input_type) {
case ov::hint::SchedulingCoreType::PCORE_ONLY:
for (auto& i : result_table) {
i[ALL_PROC] -= i[EFFICIENT_CORE_PROC];
i[EFFICIENT_CORE_PROC] = 0;
}
}
break;
case ov::hint::SchedulingCoreType::ECORE_ONLY:
if ((proc_type_table[0][EFFICIENT_CORE_PROC] > 0) &&
(proc_type_table[0][EFFICIENT_CORE_PROC] != proc_type_table[0][ALL_PROC])) {
break;
case ov::hint::SchedulingCoreType::ECORE_ONLY:
for (auto& i : result_table) {
i[ALL_PROC] -= i[MAIN_CORE_PROC] + i[HYPER_THREADING_PROC];
i[MAIN_CORE_PROC] = 0;
i[HYPER_THREADING_PROC] = 0;
}
break;
default:
break;
}
break;
default:
OPENVINO_THROW("Unsupported core type!");
};
if (((input_type == ov::hint::SchedulingCoreType::PCORE_ONLY) && (proc_type_table[0][MAIN_CORE_PROC] == 0)) ||
((input_type == ov::hint::SchedulingCoreType::ECORE_ONLY) && (proc_type_table[0][EFFICIENT_CORE_PROC] == 0))) {
input_type = ov::hint::SchedulingCoreType::ANY_CORE;
}
update_proc_type_table();
return result_table;
}

View File

@ -23,7 +23,7 @@ namespace intel_cpu {
* @param[in] proc_type_table candidate processors available at this time
* @return updated proc_type_table which removed unmatched processors
*/
std::vector<std::vector<int>> apply_scheduling_core_type(const ov::hint::SchedulingCoreType input_type,
std::vector<std::vector<int>> apply_scheduling_core_type(ov::hint::SchedulingCoreType& input_type,
const std::vector<std::vector<int>>& proc_type_table);
/**

View File

@ -20,6 +20,7 @@ struct SchedulingCoreTypeTestCase {
ov::hint::SchedulingCoreType input_type;
std::vector<std::vector<int>> proc_type_table;
std::vector<std::vector<int>> result_table;
ov::hint::SchedulingCoreType output_type;
};
class SchedulingCoreTypeTests : public CommonTestUtils::TestsCommon,
@ -27,11 +28,13 @@ class SchedulingCoreTypeTests : public CommonTestUtils::TestsCommon,
public:
void SetUp() override {
const auto& test_data = std::get<0>(GetParam());
auto test_input_type = test_data.input_type;
std::vector<std::vector<int>> test_result_table =
ov::intel_cpu::apply_scheduling_core_type(test_data.input_type, test_data.proc_type_table);
ov::intel_cpu::apply_scheduling_core_type(test_input_type, test_data.proc_type_table);
ASSERT_EQ(test_data.result_table, test_result_table);
ASSERT_EQ(test_data.output_type, test_input_type);
}
};
@ -39,36 +42,53 @@ SchedulingCoreTypeTestCase _2sockets_ALL = {
ov::hint::SchedulingCoreType::ANY_CORE,
{{208, 104, 0, 104}, {104, 52, 0, 52}, {104, 52, 0, 52}},
{{208, 104, 0, 104}, {104, 52, 0, 52}, {104, 52, 0, 52}},
ov::hint::SchedulingCoreType::ANY_CORE,
};
SchedulingCoreTypeTestCase _2sockets_P_CORE_ONLY = {
ov::hint::SchedulingCoreType::PCORE_ONLY,
{{208, 104, 0, 104}, {104, 52, 0, 52}, {104, 52, 0, 52}},
{{208, 104, 0, 104}, {104, 52, 0, 52}, {104, 52, 0, 52}},
ov::hint::SchedulingCoreType::PCORE_ONLY,
};
SchedulingCoreTypeTestCase _2sockets_E_CORE_ONLY = {
ov::hint::SchedulingCoreType::ECORE_ONLY,
{{208, 104, 0, 104}, {104, 52, 0, 52}, {104, 52, 0, 52}},
{{208, 104, 0, 104}, {104, 52, 0, 52}, {104, 52, 0, 52}},
ov::hint::SchedulingCoreType::ANY_CORE,
// ov::hint::scheduling_core_type returns ANY_CORE because the platform has no Ecores available to satisfy the
// user's request.
};
SchedulingCoreTypeTestCase _1sockets_ALL = {
ov::hint::SchedulingCoreType::ANY_CORE,
{{20, 6, 8, 6}},
{{20, 6, 8, 6}},
ov::hint::SchedulingCoreType::ANY_CORE,
};
SchedulingCoreTypeTestCase _1sockets_P_CORE_ONLY = {
ov::hint::SchedulingCoreType::PCORE_ONLY,
{{20, 6, 8, 6}},
{{12, 6, 0, 6}},
ov::hint::SchedulingCoreType::PCORE_ONLY,
};
SchedulingCoreTypeTestCase _1sockets_P_CORE_ONLY_1 = {
ov::hint::SchedulingCoreType::PCORE_ONLY,
{{8, 0, 8, 0}},
{{8, 0, 8, 0}},
ov::hint::SchedulingCoreType::ANY_CORE,
// ov::hint::scheduling_core_type returns ANY_CORE because the platform has no Pcore available to satisfy the
// user's request.
};
SchedulingCoreTypeTestCase _1sockets_E_CORE_ONLY = {
ov::hint::SchedulingCoreType::ECORE_ONLY,
{{20, 6, 8, 6}},
{{8, 0, 8, 0}},
ov::hint::SchedulingCoreType::ECORE_ONLY,
};
TEST_P(SchedulingCoreTypeTests, SchedulingCoreType) {}
@ -80,6 +100,7 @@ INSTANTIATE_TEST_SUITE_P(SchedulingCoreTypeTable,
_2sockets_E_CORE_ONLY,
_1sockets_ALL,
_1sockets_P_CORE_ONLY,
_1sockets_P_CORE_ONLY_1,
_1sockets_E_CORE_ONLY));
struct UseHTTestCase {