diff --git a/src/backend/cuda/CudaBackend.cpp b/src/backend/cuda/CudaBackend.cpp index 25635cbd3..621563e11 100644 --- a/src/backend/cuda/CudaBackend.cpp +++ b/src/backend/cuda/CudaBackend.cpp @@ -1,6 +1,6 @@ /* XMRig - * Copyright (c) 2018-2021 SChernykh - * Copyright (c) 2016-2021 XMRig , + * Copyright (c) 2018-2024 SChernykh + * Copyright (c) 2016-2024 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -227,7 +227,7 @@ public: # endif Log::print("|" CYAN_BOLD("%3zu") " |" CYAN_BOLD("%4u") " |" YELLOW(" %7s") " |" CYAN_BOLD("%10d") " |" CYAN_BOLD("%8d") " |" - CYAN_BOLD("%7d") " |" CYAN_BOLD("%3d") " |" CYAN_BOLD("%4d") " |" CYAN("%7zu") " | " GREEN("%s"), + CYAN_BOLD("%7d") " |" CYAN_BOLD("%3d") " |" CYAN_BOLD("%4d") " |" CYAN("%7zu") " | " GREEN_BOLD("%s"), i, data.thread.index(), data.device.topology().toString().data(), diff --git a/src/backend/opencl/opencl.cmake b/src/backend/opencl/opencl.cmake index b5b8da250..6c6adc233 100644 --- a/src/backend/opencl/opencl.cmake +++ b/src/backend/opencl/opencl.cmake @@ -5,13 +5,7 @@ if (BUILD_STATIC AND XMRIG_OS_UNIX AND WITH_OPENCL) endif() if (WITH_OPENCL) - add_definitions(/DXMRIG_FEATURE_OPENCL) - add_definitions(/DCL_USE_DEPRECATED_OPENCL_1_2_APIS) - if (XMRIG_OS_APPLE) - add_definitions(/DCL_TARGET_OPENCL_VERSION=120) - elseif (WITH_OPENCL_VERSION) - add_definitions(/DCL_TARGET_OPENCL_VERSION=${WITH_OPENCL_VERSION}) - endif() + add_definitions(/DXMRIG_FEATURE_OPENCL /DCL_USE_DEPRECATED_OPENCL_1_2_APIS) set(HEADERS_BACKEND_OPENCL src/backend/opencl/cl/OclSource.h @@ -71,6 +65,13 @@ if (WITH_OPENCL) src/backend/opencl/wrappers/OclPlatform.cpp ) + if (XMRIG_OS_APPLE) + add_definitions(/DCL_TARGET_OPENCL_VERSION=120) + list(APPEND SOURCES_BACKEND_OPENCL src/backend/opencl/wrappers/OclDevice_mac.cpp) + elseif (WITH_OPENCL_VERSION) + add_definitions(/DCL_TARGET_OPENCL_VERSION=${WITH_OPENCL_VERSION}) + endif() + if (WIN32) list(APPEND SOURCES_BACKEND_OPENCL src/backend/opencl/OclCache_win.cpp) else() diff --git a/src/backend/opencl/wrappers/OclDevice.cpp b/src/backend/opencl/wrappers/OclDevice.cpp index bd1ccb453..77a1c2b34 100644 --- a/src/backend/opencl/wrappers/OclDevice.cpp +++ b/src/backend/opencl/wrappers/OclDevice.cpp @@ -1,6 +1,7 @@ /* XMRig - * Copyright (c) 2018-2021 SChernykh - * Copyright (c) 2016-2021 XMRig , + * Copyright (c) 2021 Spudz76 + * Copyright (c) 2018-2024 SChernykh + * Copyright (c) 2016-2024 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,6 +18,7 @@ */ #include "backend/opencl/wrappers/OclDevice.h" +#include "3rdparty/fmt/core.h" #include "3rdparty/rapidjson/document.h" #include "backend/opencl/OclGenerator.h" #include "backend/opencl/OclThreads.h" @@ -30,6 +32,7 @@ #include +#include // NOLINTNEXTLINE(modernize-use-using) @@ -81,9 +84,11 @@ static OclVendor getPlatformVendorId(const String &vendor, const String &extensi return OCL_VENDOR_INTEL; } +# ifdef XMRIG_OS_APPLE if (extensions.contains("cl_APPLE_") || vendor.contains("Apple")) { return OCL_VENDOR_APPLE; } +# endif return OCL_VENDOR_UNKNOWN; } @@ -103,117 +108,16 @@ static OclVendor getVendorId(const String &vendor) return OCL_VENDOR_INTEL; } +# ifdef XMRIG_OS_APPLE if (vendor.contains("Apple")) { return OCL_VENDOR_APPLE; } +# endif return OCL_VENDOR_UNKNOWN; } -static OclDevice::Type getType(const String &name, const OclVendor platformVendorId) -{ - if (platformVendorId == OCL_VENDOR_APPLE) { - // Apple Platform: uses product names, not gfx# or codenames - if (name.contains("AMD Radeon")) { - if (name.contains(" 450 ") || - name.contains(" 455 ") || - name.contains(" 460 ")) { - return OclDevice::Baffin; - } - - if (name.contains(" 555 ") || name.contains(" 555X ") || - name.contains(" 560 ") || name.contains(" 560X ") || - name.contains(" 570 ") || name.contains(" 570X ") || - name.contains(" 575 ") || name.contains(" 575X ")) { - return OclDevice::Polaris; - } - - if (name.contains(" 580 ") || name.contains(" 580X ")) { - return OclDevice::Ellesmere; - } - - if (name.contains(" Vega ")) { - if (name.contains(" 48 ") || - name.contains(" 56 ") || - name.contains(" 64 ") || - name.contains(" 64X ")) { - return OclDevice::Vega_10; - } - if (name.contains(" 16 ") || - name.contains(" 20 ") || - name.contains(" II ")) { - return OclDevice::Vega_20; - } - } - - if (name.contains(" 5700 ") || name.contains(" W5700X ")) { - return OclDevice::Navi_10; - } - - if (name.contains(" 5600 ") || name.contains(" 5600M ")) { - return OclDevice::Navi_12; - } - - if (name.contains(" 5300 ") || name.contains(" 5300M ") || - name.contains(" 5500 ") || name.contains(" 5500M ")) { - return OclDevice::Navi_14; - } - - if (name.contains(" W6800 ") || name.contains(" W6900X ")) { - return OclDevice::Navi_21; - } - } - } - - if (name == "gfx900" || name == "gfx901") { - return OclDevice::Vega_10; - } - - if (name == "gfx902" || name == "gfx903") { - return OclDevice::Raven; - } - - if (name == "gfx906" || name == "gfx907") { - return OclDevice::Vega_20; - } - - if (name == "gfx1010") { - return OclDevice::Navi_10; - } - - if (name == "gfx1011") { - return OclDevice::Navi_12; - } - - if (name == "gfx1012") { - return OclDevice::Navi_14; - } - - if (name == "gfx1030") { - return OclDevice::Navi_21; - } - - if (name == "gfx804") { - return OclDevice::Lexa; - } - - if (name == "Baffin") { - return OclDevice::Baffin; - } - - if (name.contains("Ellesmere")) { - return OclDevice::Ellesmere; - } - - if (name == "gfx803" || name.contains("polaris")) { - return OclDevice::Polaris; - } - - return OclDevice::Unknown; -} - - } // namespace xmrig @@ -231,7 +135,7 @@ xmrig::OclDevice::OclDevice(uint32_t index, cl_device_id id, cl_platform_id plat { m_vendorId = getVendorId(m_vendor); m_platformVendorId = getPlatformVendorId(m_platformVendor, m_extensions); - m_type = getType(m_name, m_platformVendorId); + m_type = getType(m_name); if (m_extensions.contains("cl_amd_device_attribute_query")) { topology_amd topology; @@ -243,7 +147,7 @@ xmrig::OclDevice::OclDevice(uint32_t index, cl_device_id id, cl_platform_id plat } else if (m_extensions.contains("cl_nv_device_attribute_query")) { cl_uint bus = 0; - if (OclLib::getDeviceInfo(id, CL_DEVICE_PCI_BUS_ID_NV, sizeof (bus), &bus, nullptr) == CL_SUCCESS) { + if (OclLib::getDeviceInfo(id, CL_DEVICE_PCI_BUS_ID_NV, sizeof(bus), &bus, nullptr) == CL_SUCCESS) { cl_uint slot = OclLib::getUint(id, CL_DEVICE_PCI_SLOT_ID_NV); m_topology = PciTopology(bus, (slot >> 3) & 0xff, slot & 7); } @@ -253,17 +157,11 @@ xmrig::OclDevice::OclDevice(uint32_t index, cl_device_id id, cl_platform_id plat xmrig::String xmrig::OclDevice::printableName() const { - const size_t size = m_board.size() + m_name.size() + 64; - char *buf = new char[size](); - if (m_board.isNull()) { - snprintf(buf, size, GREEN_BOLD("%s"), m_name.data()); - } - else { - snprintf(buf, size, GREEN_BOLD("%s") " (" CYAN_BOLD("%s") ")", m_board.data(), m_name.data()); + return fmt::format(GREEN_BOLD("{}"), m_name).c_str(); } - return buf; + return fmt::format(GREEN_BOLD("{}") " (" CYAN_BOLD("{}") ")", m_board, m_name).c_str(); } @@ -311,3 +209,35 @@ void xmrig::OclDevice::toJSON(rapidjson::Value &out, rapidjson::Document &doc) c # endif } #endif + + +#ifndef XMRIG_OS_APPLE +xmrig::OclDevice::Type xmrig::OclDevice::getType(const String &name) +{ + static std::map types = { + { "gfx900", Vega_10 }, + { "gfx901", Vega_10 }, + { "gfx902", Raven }, + { "gfx903", Raven }, + { "gfx906", Vega_20 }, + { "gfx907", Vega_20 }, + { "gfx1010", Navi_10 }, + { "gfx1011", Navi_12 }, + { "gfx1012", Navi_14 }, + { "gfx1030", Navi_21 }, + { "gfx804", Lexa }, + { "Baffin", Baffin }, + { "Ellesmere", Ellesmere }, + { "gfx803", Polaris }, + { "polaris", Polaris }, + }; + + for (auto &kv : types) { + if (name.contains(kv.first)) { + return kv.second; + } + } + + return OclDevice::Unknown; +} +#endif diff --git a/src/backend/opencl/wrappers/OclDevice.h b/src/backend/opencl/wrappers/OclDevice.h index 7e9e4155f..356335fd7 100644 --- a/src/backend/opencl/wrappers/OclDevice.h +++ b/src/backend/opencl/wrappers/OclDevice.h @@ -1,6 +1,6 @@ /* XMRig - * Copyright (c) 2018-2021 SChernykh - * Copyright (c) 2016-2021 XMRig , + * Copyright (c) 2018-2024 SChernykh + * Copyright (c) 2016-2024 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,6 +86,8 @@ public: # endif private: + static OclDevice::Type getType(const String &name); + cl_device_id m_id = nullptr; cl_platform_id m_platform = nullptr; const String m_platformVendor; diff --git a/src/backend/opencl/wrappers/OclDevice_mac.cpp b/src/backend/opencl/wrappers/OclDevice_mac.cpp new file mode 100644 index 000000000..57b440562 --- /dev/null +++ b/src/backend/opencl/wrappers/OclDevice_mac.cpp @@ -0,0 +1,77 @@ +/* XMRig + * Copyright (c) 2021 Spudz76 + * Copyright (c) 2018-2024 SChernykh + * Copyright (c) 2016-2024 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "backend/opencl/wrappers/OclDevice.h" + + +xmrig::OclDevice::Type xmrig::OclDevice::getType(const String &name) +{ + // Apple Platform: uses product names, not gfx# or codenames + if (name.contains("AMD Radeon")) { + if (name.contains(" 450 ") || + name.contains(" 455 ") || + name.contains(" 460 ")) { + return Baffin; + } + + if (name.contains(" 555 ") || name.contains(" 555X ") || + name.contains(" 560 ") || name.contains(" 560X ") || + name.contains(" 570 ") || name.contains(" 570X ") || + name.contains(" 575 ") || name.contains(" 575X ")) { + return Polaris; + } + + if (name.contains(" 580 ") || name.contains(" 580X ")) { + return Ellesmere; + } + + if (name.contains(" Vega ")) { + if (name.contains(" 48 ") || + name.contains(" 56 ") || + name.contains(" 64 ") || + name.contains(" 64X ")) { + return Vega_10; + } + if (name.contains(" 16 ") || + name.contains(" 20 ") || + name.contains(" II ")) { + return Vega_20; + } + } + + if (name.contains(" 5700 ") || name.contains(" W5700X ")) { + return Navi_10; + } + + if (name.contains(" 5600 ") || name.contains(" 5600M ")) { + return Navi_12; + } + + if (name.contains(" 5300 ") || name.contains(" 5300M ") || + name.contains(" 5500 ") || name.contains(" 5500M ")) { + return Navi_14; + } + + if (name.contains(" W6800 ") || name.contains(" W6900X ")) { + return Navi_21; + } + } + + return OclDevice::Unknown; +}