Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cpp/oneapi/dal/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ dal_public_includes(
":optional",
"@onedal//cpp/oneapi/dal/detail/mpi",
"@onedal//cpp/oneapi/dal/detail/ccl",
"@onedal//cpp/oneapi/dal/detail/parameters",
"@onedal//cpp/oneapi/dal/algo:parameters",
],
)
Expand All @@ -84,6 +85,7 @@ dal_static_lib(
dal_deps = [
":static",
"@onedal//cpp/oneapi/dal/algo:parameters",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

Expand All @@ -102,6 +104,7 @@ dal_dynamic_lib(
dal_deps = [
":dynamic",
"@onedal//cpp/oneapi/dal/algo:parameters",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

Expand Down
2 changes: 2 additions & 0 deletions cpp/oneapi/dal/algo/covariance/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ dal_module(
auto = True,
dal_deps = [
"@onedal//cpp/oneapi/dal:core",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

dal_module(
name = "parameters",
dal_deps = [
"@onedal//cpp/oneapi/dal/algo/covariance/parameters",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

Expand Down
3 changes: 2 additions & 1 deletion cpp/oneapi/dal/algo/covariance/compute_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#pragma once

#include "oneapi/dal/algo/covariance/common.hpp"
#include "oneapi/dal/detail/parameters/system_parameters.hpp"

namespace oneapi::dal::covariance {

Expand All @@ -35,7 +36,7 @@ template <typename Task>
class partial_compute_result_impl;

template <typename Task = task::by_default>
class compute_parameters : public base {
class compute_parameters : public dal::detail::system_parameters {
public:
explicit compute_parameters();
compute_parameters(compute_parameters&&) = default;
Expand Down
25 changes: 25 additions & 0 deletions cpp/oneapi/dal/algo/covariance/test/compute_parameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,29 @@ TEMPLATE_LIST_TEST_M(covariance_params_test,
this->general_checks(input, input_data_table_id);
}

TEST("can dump system-related parameters") {
detail::compute_parameters hp{};
std::string hp_dump;
#ifdef ONEDAL_DATA_PARALLEL
DECLARE_TEST_POLICY(policy);
auto& q = policy.get_queue();
hp_dump = hp.dump(q);
#else
hp_dump = hp.dump();
#endif
std::cout << "System-related parameters: " << hp_dump << std::endl;
REQUIRE(hp_dump.size() > 0);
}

TEST("can retrieve system-related parameters") {
detail::compute_parameters hp{};
REQUIRE(static_cast<uint64_t>(hp.get_top_enabled_cpu_extension()) >= 0);
REQUIRE(hp.get_max_number_of_threads() > 0);
#ifdef ONEDAL_DATA_PARALLEL
DECLARE_TEST_POLICY(policy);
auto& q = policy.get_queue();
REQUIRE(hp.get_max_workgroup_size(q) > 0);
#endif
}

} // namespace oneapi::dal::covariance::test
2 changes: 2 additions & 0 deletions cpp/oneapi/dal/algo/decision_forest/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ dal_module(
dal_deps = [
"@onedal//cpp/oneapi/dal:core",
"@onedal//cpp/oneapi/dal/algo/decision_forest/backend:model_impl",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

dal_module(
name = "parameters",
dal_deps = [
"@onedal//cpp/oneapi/dal/algo/decision_forest/parameters",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

Expand Down
3 changes: 2 additions & 1 deletion cpp/oneapi/dal/algo/decision_forest/infer_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#pragma once

#include "oneapi/dal/algo/decision_forest/common.hpp"
#include "oneapi/dal/detail/parameters/system_parameters.hpp"

namespace oneapi::dal::decision_forest {

Expand All @@ -33,7 +34,7 @@ template <typename Task>
struct infer_parameters_impl;

template <typename Task = task::by_default>
class infer_parameters : public base {
class infer_parameters : public dal::detail::system_parameters {
public:
explicit infer_parameters();
infer_parameters(infer_parameters&&) = default;
Expand Down
2 changes: 2 additions & 0 deletions cpp/oneapi/dal/algo/linear_regression/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ dal_module(
dal_deps = [
"@onedal//cpp/oneapi/dal:core",
"@onedal//cpp/oneapi/dal/algo/linear_regression/backend:model_impl",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

dal_module(
name = "parameters",
dal_deps = [
"@onedal//cpp/oneapi/dal/algo/linear_regression/parameters",
"@onedal//cpp/oneapi/dal/detail/parameters",
],
)

Expand Down
3 changes: 2 additions & 1 deletion cpp/oneapi/dal/algo/linear_regression/train_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#pragma once

#include "oneapi/dal/algo/linear_regression/common.hpp"
#include "oneapi/dal/detail/parameters/system_parameters.hpp"

namespace oneapi::dal::linear_regression {

Expand All @@ -35,7 +36,7 @@ template <typename Task>
class partial_train_result_impl;

template <typename Task = task::by_default>
class train_parameters : public base {
class train_parameters : public dal::detail::system_parameters {
public:
explicit train_parameters();
train_parameters(train_parameters&&) = default;
Expand Down
6 changes: 4 additions & 2 deletions cpp/oneapi/dal/detail/cpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
namespace oneapi::dal::detail {
namespace v1 {

inline constexpr cpu_extension from_daal_cpu_type(daal::CpuType cpu) {
cpu_extension from_daal_cpu_type(int cpu_type) {
daal::CpuType cpu = static_cast<daal::CpuType>(cpu_type);
switch (cpu) {
#if defined(TARGET_X86_64)
case daal::sse2: return cpu_extension::sse2;
Expand All @@ -35,6 +36,7 @@ inline constexpr cpu_extension from_daal_cpu_type(daal::CpuType cpu) {
}
return cpu_extension::none;
}

cpu_extension detect_top_cpu_extension() {
if (!__daal_serv_cpu_extensions_available()) {
#if defined(TARGET_X86_64)
Expand All @@ -45,7 +47,7 @@ cpu_extension detect_top_cpu_extension() {
return detail::cpu_extension::rv64;
#endif
}
const auto daal_cpu = (daal::CpuType)__daal_serv_cpu_detect(0);
const auto daal_cpu = __daal_serv_cpu_detect(0);

return from_daal_cpu_type(daal_cpu);
}
Expand Down
1 change: 1 addition & 0 deletions cpp/oneapi/dal/detail/cpu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ enum class cpu_extension : uint64_t {
#endif
};

cpu_extension from_daal_cpu_type(int);
cpu_extension detect_top_cpu_extension();

} // namespace v1
Expand Down
12 changes: 6 additions & 6 deletions cpp/oneapi/dal/detail/cpu_info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,21 @@ namespace v1 {

cpu_info::cpu_info() {
#if defined(TARGET_X86_64)
impl_ = detail::pimpl<cpu_info_iface>(new cpu_info_x86());
impl_ = detail::pimpl<cpu_info_iface>(std::make_unique<cpu_info_x86>());
#elif defined(TARGET_ARM)
impl_ = detail::pimpl<cpu_info_iface>(new cpu_info_arm());
impl_ = detail::pimpl<cpu_info_iface>(std::make_unique<cpu_info_arm>());
#elif defined(TARGET_RISCV64)
impl_ = detail::pimpl<cpu_info_iface>(new cpu_info_riscv64());
impl_ = detail::pimpl<cpu_info_iface>(std::make_unique<cpu_info_riscv64>());
#endif
}

cpu_info::cpu_info(const cpu_extension cpu_extension_) {
#if defined(TARGET_X86_64)
impl_ = detail::pimpl<cpu_info_iface>(new cpu_info_x86(cpu_extension_));
impl_ = detail::pimpl<cpu_info_iface>(std::make_unique<cpu_info_x86>(cpu_extension_));
#elif defined(TARGET_ARM)
impl_ = detail::pimpl<cpu_info_iface>(new cpu_info_arm(cpu_extension_));
impl_ = detail::pimpl<cpu_info_iface>(std::make_unique<cpu_info_arm>(cpu_extension_));
#elif defined(TARGET_RISCV64)
impl_ = detail::pimpl<cpu_info_iface>(new cpu_info_riscv64(cpu_extension_));
impl_ = detail::pimpl<cpu_info_iface>(std::make_unique<cpu_info_riscv64>(cpu_extension_));
#endif
}

Expand Down
15 changes: 9 additions & 6 deletions cpp/oneapi/dal/detail/cpu_info_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,29 +69,32 @@ cpu_extension cpu_info_impl::get_top_cpu_extension() const {
}

std::string cpu_info_impl::dump() const {
std::stringstream ss;
for (auto it = info_.begin(); it != info_.end(); ++it) {
ss << it->first << " : ";
print_any(it->second, ss);
std::ostringstream ss;
for (auto const& [name, value] : info_) {
ss << name << " : ";
print_any(value, ss);
ss << "; ";
}
return std::move(ss).str();
}

template <typename T>
void cpu_info_impl::print(const std::any& value, std::stringstream& ss) const {
void cpu_info_impl::print(const std::any& value, std::ostringstream& ss) const {
T typed_value = std::any_cast<T>(value);
ss << to_string(typed_value);
}

void cpu_info_impl::print_any(const std::any& value, std::stringstream& ss) const {
void cpu_info_impl::print_any(const std::any& value, std::ostringstream& ss) const {
const std::type_info& ti = value.type();
if (ti == typeid(cpu_extension)) {
print<cpu_extension>(value, ss);
}
else if (ti == typeid(cpu_vendor)) {
print<cpu_vendor>(value, ss);
}
else {
throw unimplemented{ dal::detail::error_messages::unsupported_data_type() };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you pass the typeid of ti so that this message is a little more specific? It would be nice to know what the unknown type is

}
}

} // namespace v1
Expand Down
4 changes: 2 additions & 2 deletions cpp/oneapi/dal/detail/cpu_info_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ class cpu_info_impl : public cpu_info_iface {
std::map<std::string, std::any> info_;

template <typename T>
void print(const std::any& value, std::stringstream& ss) const;
void print(const std::any& value, std::ostringstream& ss) const;

void print_any(const std::any& value, std::stringstream& ss) const;
void print_any(const std::any& value, std::ostringstream& ss) const;
};

} // namespace v1
Expand Down
15 changes: 15 additions & 0 deletions cpp/oneapi/dal/detail/parameters/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
load(
"@onedal//dev/bazel:dal.bzl",
"dal_module",
"dal_test_suite",
)

package(default_visibility = ["//visibility:public"])

dal_module(
name = "parameters",
auto = True,
dal_deps = [
"@onedal//cpp/oneapi/dal:common",
]
)
52 changes: 52 additions & 0 deletions cpp/oneapi/dal/detail/parameters/system_parameters.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*******************************************************************************
* Copyright contributors to the oneDAL project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/

#include "oneapi/dal/detail/parameters/system_parameters.hpp"

namespace oneapi::dal {

namespace detail {

system_parameters::system_parameters()
: impl_(detail::pimpl<system_parameters_impl>(std::make_unique<system_parameters_impl>())) {
}

cpu_extension system_parameters::get_top_enabled_cpu_extension() const {
return impl_->get_top_enabled_cpu_extension();
}

std::uint32_t system_parameters::get_max_number_of_threads() const {
return impl_->get_max_number_of_threads();
}

std::string system_parameters::dump() const {
return impl_->dump();
}

#ifdef ONEDAL_DATA_PARALLEL

std::uint32_t system_parameters::get_max_workgroup_size(sycl::queue& queue) const {
return impl_->get_max_workgroup_size(queue);
}

std::string system_parameters::dump(sycl::queue& queue) const {
return impl_->dump(queue);
}

#endif

} // namespace detail
} // namespace oneapi::dal
Loading