/******************************************************************************* * Copyright 2024 Intel Corporation * * 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. *******************************************************************************/ #ifndef COMMON_XPU_UTILS_HPP #define COMMON_XPU_UTILS_HPP #include #include #include "common/utils.hpp" // This file contains utility functionality for heterogeneous runtimes such // as OpenCL and SYCL. namespace dnnl { namespace impl { namespace xpu { using binary_t = std::vector; using device_uuid_t = std::tuple; struct device_uuid_hasher_t { size_t operator()(const device_uuid_t &uuid) const; }; struct runtime_version_t { int major; int minor; int build; runtime_version_t(int major = 0, int minor = 0, int build = 0) : major {major}, minor {minor}, build {build} {} bool operator==(const runtime_version_t &other) const { return (major == other.major) && (minor == other.minor) && (build == other.build); } bool operator!=(const runtime_version_t &other) const { return !(*this == other); } bool operator<(const runtime_version_t &other) const { if (major < other.major) return true; if (major > other.major) return false; if (minor < other.minor) return true; if (minor > other.minor) return false; return (build < other.build); } bool operator>(const runtime_version_t &other) const { return (other < *this); } bool operator<=(const runtime_version_t &other) const { return !(*this > other); } bool operator>=(const runtime_version_t &other) const { return !(*this < other); } status_t set_from_string(const char *s) { int i_major = 0, i = 0; for (; s[i] != '.'; i++) if (!s[i]) return status::invalid_arguments; auto i_minor = ++i; for (; s[i] != '.'; i++) if (!s[i]) return status::invalid_arguments; auto i_build = ++i; major = atoi(&s[i_major]); minor = atoi(&s[i_minor]); build = atoi(&s[i_build]); return status::success; } std::string str() const { return utils::format("%d.%d.%d", major, minor, build); } }; } // namespace xpu } // namespace impl } // namespace dnnl #endif