diff --git a/CMakeLists.txt b/CMakeLists.txt index 4686286a..a2cfccc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,7 +206,8 @@ endif() if (WITH_CC_SERVER OR WITH_CC_CLIENT) set(SOURCES_CC_COMMON src/cc/ControlCommand.cpp - src/cc/ClientStatus.cpp) + src/cc/ClientStatus.cpp + src/cc/GPUInfo.cpp) else() add_definitions(/DXMRIG_NO_CC) endif() diff --git a/src/Options.cpp b/src/Options.cpp index 9b24e6ae..464499a8 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -324,7 +324,7 @@ Options::Options(int argc, char **argv) : m_ccUseTls(false), m_ccUseRemoteLogging(true), m_ccUploadConfigOnStartup(true), - m_configFile(Platform::defaultConfigName()), + m_fileName(Platform::defaultConfigName()), m_apiToken(nullptr), m_apiWorkerId(nullptr), m_logFile(nullptr), @@ -856,7 +856,7 @@ Url *Options::parseUrl(const char *arg) const void Options::parseConfig(const char *fileName) { - m_configFile = fileName; + m_fileName = fileName; rapidjson::Document doc; if (!getJSON(fileName, doc)) { diff --git a/src/Options.h b/src/Options.h index 799980af..39d26ffd 100644 --- a/src/Options.h +++ b/src/Options.h @@ -74,7 +74,7 @@ public: inline bool ccUseTls() const { return m_ccUseTls; } inline bool ccUseRemoteLogging() const { return m_ccUseRemoteLogging; } inline bool ccUploadConfigOnStartup() const { return m_ccUploadConfigOnStartup; } - inline const char *configFile() const { return m_configFile; } + inline const char *fileName() const { return m_fileName; } inline const char *apiToken() const { return m_apiToken; } inline const char *apiWorkerId() const { return m_apiWorkerId; } inline const char *logFile() const { return m_logFile; } @@ -149,7 +149,7 @@ private: bool m_ccUseTls; bool m_ccUseRemoteLogging; bool m_ccUploadConfigOnStartup; - const char* m_configFile; + const char* m_fileName; char *m_apiToken; char *m_apiWorkerId; char *m_logFile; diff --git a/src/cc/CCClient.cpp b/src/cc/CCClient.cpp index beae6d3e..6e1fe633 100644 --- a/src/cc/CCClient.cpp +++ b/src/cc/CCClient.cpp @@ -1,10 +1,4 @@ -/* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2016-2017 XMRig +/* XMRigCC * Copyright 2017- BenDr0id * * @@ -28,18 +22,26 @@ #include <3rdparty/rapidjson/stringbuffer.h> #include <3rdparty/rapidjson/prettywriter.h> #include -#include #include #include "CCClient.h" #include "App.h" -#include "Platform.h" #include "Cpu.h" -#include "Mem.h" #include "ControlCommand.h" -#include "api/NetworkState.h" +#ifdef TYPE_AMD_GPU +#include "common/log/Log.h" +#include "common/log/RemoteLog.h" +#include "common/Platform.h" +#include "core/Config.h" +#else +#include "Mem.h" #include "log/Log.h" +#include "log/RemoteLog.h" +#include "Platform.h" +#include "api/NetworkState.h" +#endif + #include "workers/Workers.h" #include "workers/Hashrate.h" @@ -55,8 +57,12 @@ CCClient* CCClient::m_self = nullptr; uv_mutex_t CCClient::m_mutex; -CCClient::CCClient(Options* options, uv_async_t* async) - : m_options(options), +#ifdef TYPE_AMD_GPU +CCClient::CCClient(xmrig::Config* config, uv_async_t* async) +#else +CCClient::CCClient(Options* config, uv_async_t* async) +#endif + : m_config(config), m_async(async) { uv_mutex_init(&m_mutex); @@ -64,8 +70,8 @@ CCClient::CCClient(Options* options, uv_async_t* async) m_self = this; std::string clientId; - if (m_options->ccWorkerId()) { - clientId = m_options->ccWorkerId(); + if (config->ccWorkerId()) { + clientId =m_self->m_config->ccWorkerId(); } else { char hostname[128]; memset(hostname, 0, sizeof(hostname)); @@ -74,27 +80,28 @@ CCClient::CCClient(Options* options, uv_async_t* async) } m_clientStatus.setClientId(clientId); - - if (m_options->algoName() != nullptr) { - m_clientStatus.setCurrentAlgoName(m_options->algoName()); - } - - m_clientStatus.setHashFactor(Mem::hashFactor()); m_clientStatus.setVersion(Version::string()); m_clientStatus.setCpuBrand(Cpu::brand()); m_clientStatus.setCpuAES(Cpu::hasAES()); - m_clientStatus.setCpuSockets(Cpu::sockets()); - m_clientStatus.setCpuCores(Cpu::cores()); - m_clientStatus.setCpuThreads(Cpu::threads()); + m_clientStatus.setCpuSockets(static_cast(Cpu::sockets())); + m_clientStatus.setCpuCores(static_cast(Cpu::cores())); + m_clientStatus.setCpuThreads(static_cast(Cpu::threads())); m_clientStatus.setCpuX64(Cpu::isX64()); - m_clientStatus.setCpuL2(Cpu::l2()); - m_clientStatus.setCpuL3(Cpu::l3()); - m_clientStatus.setCurrentThreads(m_options->threads()); + m_clientStatus.setCpuL2(static_cast(Cpu::l2())); + m_clientStatus.setCpuL3(static_cast(Cpu::l3())); + +#ifdef TYPE_AMD_GPU + m_clientStatus.setCurrentThreads(static_cast(config->threads().size())); + m_clientStatus.setCurrentAlgoName(config->algorithm().name()); +#else + m_clientStatus.setCurrentThreads(static_cast(config->threads())); + m_clientStatus.setCurrentAlgoName(config->algoName()); +#endif m_startTime = std::chrono::system_clock::now(); - if (m_options->ccToken() != nullptr) { - m_authorization = std::string("Bearer ") + m_self->m_options->ccToken(); + if (config->ccToken() != nullptr) { + m_authorization = std::string("Bearer ") + m_self->m_config->ccToken(); } uv_thread_create(&m_thread, CCClient::onThreadStarted, this); @@ -133,16 +140,54 @@ void CCClient::updateNetworkState(const NetworkState& network) m_self->m_clientStatus.setHashesTotal(network.total); m_self->m_clientStatus.setAvgTime(network.avgTime()); +#ifdef TYPE_AMD_GPU + m_clientStatus.setHashFactor(0); + m_self->m_clientStatus.setHugepagesEnabled(false); + m_self->m_clientStatus.setHugepages(false); + m_self->m_clientStatus.setTotalPages(0); + m_self->m_clientStatus.setTotalHugepages(0); + m_self->m_clientStatus.setCurrentPowVariantName(xmrig::Algorithm::getVariantName(network.powVariant)); +#else + m_self->m_clientStatus.setHashFactor(Mem::hashFactor()); m_self->m_clientStatus.setHugepagesEnabled(Mem::isHugepagesEnabled()); m_self->m_clientStatus.setHugepages(Mem::isHugepagesAvailable()); m_self->m_clientStatus.setTotalPages(Mem::getTotalPages()); m_self->m_clientStatus.setTotalHugepages(Mem::getTotalHugepages()); m_self->m_clientStatus.setCurrentPowVariantName(getPowVariantName(network.powVariant)); +#endif uv_mutex_unlock(&m_mutex); } } +#ifdef TYPE_AMD_GPU +void CCClient::updateGpuInfo(const std::vector& gpuContext) +{ + if (m_self) { + uv_mutex_lock(&m_mutex); + + m_self->m_clientStatus.clearGPUInfoList(); + + for (auto gpu : gpuContext) { + GPUInfo gpuInfo; + gpuInfo.setName(gpu.name); + gpuInfo.setCompMode(gpu.compMode); + gpuInfo.setComputeUnits(gpu.computeUnits); + gpuInfo.setDeviceIdx(gpu.deviceIdx); + gpuInfo.setFreeMem(gpu.freeMem); + gpuInfo.setWorkSize(gpu.workSize); + gpuInfo.setMaxWorkSize(gpu.maximumWorkSize); + gpuInfo.setMemChunk(gpu.memChunk); + gpuInfo.setRawIntensity(gpu.rawIntensity); + + m_self->m_clientStatus.addGPUInfo(gpuInfo); + } + + uv_mutex_unlock(&m_mutex); + } +} +#endif + void CCClient::publishClientStatusReport() { std::string requestUrl = "/client/setClientStatus?clientId=" + m_self->m_clientStatus.getClientId(); @@ -151,10 +196,10 @@ void CCClient::publishClientStatusReport() auto res = performRequest(requestUrl, requestBuffer, "POST"); if (!res) { LOG_ERR("[CC-Client] error: unable to performRequest POST -> http://%s:%d%s", - m_self->m_options->ccHost(), m_self->m_options->ccPort(), requestUrl.c_str()); + m_self->m_config->ccHost(), m_self->m_config->ccPort(), requestUrl.c_str()); } else if (res->status != 200) { - LOG_ERR("[CC-Client] error: \"%d\" -> http://%s:%d%s", res->status, m_self->m_options->ccHost(), - m_self->m_options->ccPort(), requestUrl.c_str()); + LOG_ERR("[CC-Client] error: \"%d\" -> http://%s:%d%s", res->status,m_self->m_config->ccHost(), + m_self->m_config->ccPort(), requestUrl.c_str()); } else { ControlCommand controlCommand; if (controlCommand.parseFromJsonString(res->body)) { @@ -194,14 +239,14 @@ void CCClient::updateConfig() auto res = performRequest(requestUrl, requestBuffer, "GET"); if (!res) { LOG_ERR("[CC-Client] error: unable to performRequest GET -> http://%s:%d%s", - m_self->m_options->ccHost(), m_self->m_options->ccPort(), requestUrl.c_str()); + m_self->m_config->ccHost(), m_self->m_config->ccPort(), requestUrl.c_str()); } else if (res->status != 200) { - LOG_ERR("[CC-Client] error: \"%d\" -> http://%s:%d%s", res->status, m_self->m_options->ccHost(), - m_self->m_options->ccPort(), requestUrl.c_str()); + LOG_ERR("[CC-Client] error: \"%d\" -> http://%s:%d%s", res->status, m_self->m_config->ccHost(), + m_self->m_config->ccPort(), requestUrl.c_str()); } else { rapidjson::Document document; if (!document.Parse(res->body.c_str()).HasParseError()) { - std::ofstream clientConfigFile(m_self->m_options->configFile()); + std::ofstream clientConfigFile(m_self->m_config->fileName()); if (clientConfigFile) { rapidjson::StringBuffer buffer(0, 65536); rapidjson::PrettyWriter writer(buffer); @@ -213,7 +258,7 @@ void CCClient::updateConfig() LOG_WARN("[CC-Client] Config updated. -> trigger restart"); } else { - LOG_ERR("[CC-Client] Not able to store client config to file %s.", m_self->m_options->configFile()); + LOG_ERR("[CC-Client] Not able to store client config to file %s.", m_self->m_config->fileName()); } } else { LOG_ERR("[CC-Client] Not able to store client config. received client config is broken!"); @@ -226,7 +271,7 @@ void CCClient::publishConfig() std::string requestUrl = "/client/setClientConfig?clientId=" + m_self->m_clientStatus.getClientId(); std::stringstream data; - std::ifstream clientConfig(m_self->m_options->configFile()); + std::ifstream clientConfig(m_self->m_config->fileName()); if (clientConfig) { data << clientConfig.rdbuf(); @@ -246,16 +291,16 @@ void CCClient::publishConfig() auto res = performRequest(requestUrl, buffer.GetString(), "POST"); if (!res) { LOG_ERR("[CC-Client] error: unable to performRequest POST -> http://%s:%d%s", - m_self->m_options->ccHost(), m_self->m_options->ccPort(), requestUrl.c_str()); + m_self->m_config->ccHost(), m_self->m_config->ccPort(), requestUrl.c_str()); } else if (res->status != 200) { - LOG_ERR("[CC-Client] error: \"%d\" -> http://%s:%d%s", res->status, m_self->m_options->ccHost(), - m_self->m_options->ccPort(), requestUrl.c_str()); + LOG_ERR("[CC-Client] error: \"%d\" -> http://%s:%d%s", res->status, m_self->m_config->ccHost(), + m_self->m_config->ccPort(), requestUrl.c_str()); } } else { - LOG_ERR("Not able to send config. Client config %s is broken!", m_self->m_options->configFile()); + LOG_ERR("Not able to send config. Client config %s is broken!", m_self->m_config->fileName()); } } else { - LOG_ERR("Not able to load client config %s. Please make sure it exists!", m_self->m_options->configFile()); + LOG_ERR("Not able to load client config %s. Please make sure it exists!", m_self->m_config->fileName()); } } @@ -266,11 +311,11 @@ std::shared_ptr CCClient::performRequest(const std::string& r std::shared_ptr cli; # ifndef XMRIG_NO_TLS - if (m_self->m_options->ccUseTls()) { - cli = std::make_shared(m_self->m_options->ccHost(), m_self->m_options->ccPort(), 10); + if (m_self->m_config->ccUseTls()) { + cli = std::make_shared(m_self->m_config->ccHost(), m_self->m_config->ccPort(), 10); } else { # endif - cli = std::make_shared(m_self->m_options->ccHost(), m_self->m_options->ccPort(), 10); + cli = std::make_shared(m_self->m_config->ccHost(), m_self->m_config->ccPort(), 10); # ifndef XMRIG_NO_TLS } # endif @@ -317,10 +362,10 @@ void CCClient::onThreadStarted(void* handle) uv_timer_init(&m_self->m_client_loop, &m_self->m_timer); uv_timer_start(&m_self->m_timer, CCClient::onReport, - static_cast(m_self->m_options->ccUpdateInterval() * 1000), - static_cast(m_self->m_options->ccUpdateInterval() * 1000)); + static_cast(m_self->m_config->ccUpdateInterval() * 1000), + static_cast(m_self->m_config->ccUpdateInterval() * 1000)); - if (m_self->m_options->ccUploadConfigOnStartup()) { + if (m_self->m_config->ccUploadConfigOnStartup()) { m_self->publishConfig(); } diff --git a/src/cc/CCClient.h b/src/cc/CCClient.h index 0cf2f457..289bdf2e 100644 --- a/src/cc/CCClient.h +++ b/src/cc/CCClient.h @@ -1,10 +1,4 @@ -/* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2016-2017 XMRig +/* XMRigCC * Copyright 2017- BenDr0id * * @@ -31,8 +25,15 @@ #include #include #include <3rdparty/cpp-httplib/httplib.h> -#include "Options.h" #include "ClientStatus.h" +#include "version.h" + +#ifdef TYPE_AMD_GPU +#include "amd/GpuContext.h" +#include "core/Controller.h" +#else +#include "Options.h" +#endif class Hashrate; class NetworkState; @@ -40,7 +41,13 @@ class NetworkState; class CCClient { public: - CCClient(Options *options, uv_async_t* async); +#ifdef TYPE_AMD_GPU + CCClient(xmrig::Config* m_config, uv_async_t* async); + static void updateGpuInfo(const std::vector& network); +#else + CCClient(Options* config, uv_async_t* async); +#endif + ~CCClient(); static void updateHashrate(const Hashrate *hashrate); @@ -60,7 +67,11 @@ private: static void onThreadStarted(void *handle); static void onReport(uv_timer_t *handle); - const Options* m_options; +#ifdef TYPE_AMD_GPU + const xmrig::Config* m_config; +#else + const Options* m_config; +#endif static CCClient* m_self; static uv_mutex_t m_mutex; diff --git a/src/cc/ClientStatus.cpp b/src/cc/ClientStatus.cpp index cddb8c89..42182cc2 100644 --- a/src/cc/ClientStatus.cpp +++ b/src/cc/ClientStatus.cpp @@ -1,13 +1,6 @@ -/* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2016-2017 XMRig +/* XMRigCC * Copyright 2017- BenDr0id * - * * 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 @@ -27,7 +20,6 @@ #include #include <3rdparty/rapidjson/stringbuffer.h> #include <3rdparty/rapidjson/prettywriter.h> -#include #include "ClientStatus.h" @@ -491,6 +483,18 @@ bool ClientStatus::parseFromJson(const rapidjson::Document& document) m_cpuL3 = clientStatus["cpu_l3"].GetInt(); } + if (clientStatus.HasMember("gpu_info_list") && clientStatus["gpu_info_list"].IsArray()) { + m_gpuInfoList.clear(); + + auto gpuInfoList = clientStatus["gpu_info_list"].GetArray(); + for (rapidjson::Value::ConstValueIterator itr = gpuInfoList.Begin(); itr != gpuInfoList.End(); ++itr) { + GPUInfo gpuInfo; + gpuInfo.parseFromJson((*itr)["gpu_info"]); + + m_gpuInfoList.push_back(gpuInfo); + } + } + if (clientStatus.HasMember("shares_good")) { m_sharesGood = clientStatus["shares_good"].GetUint64(); } @@ -515,8 +519,6 @@ bool ClientStatus::parseFromJson(const rapidjson::Document& document) m_lastStatusUpdate = std::chrono::system_clock::to_time_t(time_point); result = true; - } else { - LOG_ERR("Parse Error, JSON does not contain: control_command"); } return result; @@ -556,6 +558,14 @@ rapidjson::Value ClientStatus::toJson(rapidjson::MemoryPoolAllocator(m_lastStatusUpdate), allocator); - clientStatus.AddMember("log", rapidjson::StringRef(m_log.c_str()), allocator); @@ -589,3 +597,13 @@ std::string ClientStatus::toJsonString() return strdup(buffer.GetString()); } + +void ClientStatus::clearGPUInfoList() +{ + m_gpuInfoList.clear(); +} + +void ClientStatus::addGPUInfo(const GPUInfo gpuInfo) +{ + m_gpuInfoList.push_back(gpuInfo); +} diff --git a/src/cc/ClientStatus.h b/src/cc/ClientStatus.h index e8204126..65eb1ed2 100644 --- a/src/cc/ClientStatus.h +++ b/src/cc/ClientStatus.h @@ -1,10 +1,4 @@ -/* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2016-2017 XMRig +/* XMRigCC * Copyright 2017- BenDr0id * * @@ -27,7 +21,9 @@ #include #include +#include #include +#include "GPUInfo.h" class ClientStatus { @@ -136,6 +132,10 @@ public: int getCpuL3() const; void setCpuL3(int cpuL3); + const std::list getGPUInfoList() const; + void addGPUInfo(const GPUInfo gpuInfo); + void clearGPUInfoList(); + uint64_t getSharesGood() const; void setSharesGood(uint64_t sharesGood); @@ -157,7 +157,6 @@ public: rapidjson::Value toJson(rapidjson::MemoryPoolAllocator& allocator); bool parseFromJson(const rapidjson::Document& document); - private: const char* status_str[3] = { "RUNNING", @@ -196,6 +195,8 @@ private: int m_cpuL2; int m_cpuL3; + std::list m_gpuInfoList; + uint64_t m_sharesGood; uint64_t m_sharesTotal; uint64_t m_hashesTotal; diff --git a/src/cc/ControlCommand.cpp b/src/cc/ControlCommand.cpp index a7cd663e..85dfdaf2 100644 --- a/src/cc/ControlCommand.cpp +++ b/src/cc/ControlCommand.cpp @@ -1,13 +1,6 @@ -/* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2016-2017 XMRig +/* XMRigCC * Copyright 2017- BenDr0id * - * * 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 @@ -25,7 +18,12 @@ #include <3rdparty/rapidjson/stringbuffer.h> #include <3rdparty/rapidjson/prettywriter.h> +#ifdef TYPE_AMD_GPU +#include "common/log/Log.h" +#else #include "log/Log.h" +#endif + #include "ControlCommand.h" ControlCommand::ControlCommand() @@ -81,7 +79,7 @@ rapidjson::Value ControlCommand::toJson(rapidjson::MemoryPoolAllocator - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2016-2017 XMRig +/* XMRigCC * Copyright 2017- BenDr0id * - * * 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 @@ -74,7 +67,7 @@ public: bool parseFromJson(const rapidjson::Document& document); Command getCommand() const; - void setCommand(Command command); + void setCommand(const Command& command); bool isOneTimeCommand() const; diff --git a/src/cc/GPUInfo.cpp b/src/cc/GPUInfo.cpp new file mode 100644 index 00000000..72ba83f9 --- /dev/null +++ b/src/cc/GPUInfo.cpp @@ -0,0 +1,187 @@ +/* XMRigCC + * Copyright 2018- BenDr0id + * + * 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 "GPUInfo.h" + +GPUInfo::GPUInfo() + : m_deviceIdx(0), + m_rawIntensity(0), + m_workSize(0), + m_maxWorkSize(0), + m_freeMem(0), + m_memChunk(0), + m_compMode(0), + m_computeUnits(0) +{ + +} + +GPUInfo::~GPUInfo() +{ + +} + +rapidjson::Value GPUInfo::toJson(rapidjson::MemoryPoolAllocator & allocator) +{ + rapidjson::Value gpuInfo(rapidjson::kObjectType); + + gpuInfo.AddMember("name", rapidjson::StringRef(m_name.c_str()), allocator); + gpuInfo.AddMember("device_idx", m_deviceIdx, allocator); + gpuInfo.AddMember("raw_intensity", m_rawIntensity, allocator); + gpuInfo.AddMember("work_size", m_workSize, allocator); + gpuInfo.AddMember("max_work_size", m_maxWorkSize, allocator); + gpuInfo.AddMember("free_mem", m_freeMem, allocator); + gpuInfo.AddMember("mem_chunk", m_memChunk, allocator); + gpuInfo.AddMember("comp_mode", m_memChunk, allocator); + gpuInfo.AddMember("compute_units", m_memChunk, allocator); + + return gpuInfo; +} + +bool GPUInfo::parseFromJson(const rapidjson::Value& gpuInfo) +{ + bool result = false; + + if (gpuInfo.HasMember("name")) { + m_name = gpuInfo["name"].GetString(); + result = true; + } + + if (gpuInfo.HasMember("device_idx")) { + m_deviceIdx = static_cast(gpuInfo["device_idx"].GetInt()); + } + + if (gpuInfo.HasMember("raw_intensity")) { + m_rawIntensity = static_cast(gpuInfo["raw_intensity"].GetInt()); + } + + if (gpuInfo.HasMember("work_size")) { + m_workSize = static_cast(gpuInfo["work_size"].GetInt()); + } + + if (gpuInfo.HasMember("max_work_size")) { + m_maxWorkSize = static_cast(gpuInfo["max_work_size"].GetInt()); + } + + if (gpuInfo.HasMember("free_mem")) { + m_freeMem = static_cast(gpuInfo["free_mem"].GetInt()); + } + + if (gpuInfo.HasMember("mem_chunk")) { + m_memChunk = gpuInfo["mem_chunk"].GetInt(); + } + + if (gpuInfo.HasMember("comp_mode")) { + m_compMode = gpuInfo["comp_mode"].GetInt(); + } + + if (gpuInfo.HasMember("compute_units")) { + m_computeUnits = gpuInfo["compute_units"].GetInt(); + } + + return result; +} + +size_t GPUInfo::getDeviceIdx() const +{ + return m_deviceIdx; +} + +void GPUInfo::setDeviceIdx(size_t deviceIdx) +{ + m_deviceIdx = deviceIdx; +} + +size_t GPUInfo::getRawIntensity() const +{ + return m_rawIntensity; +} + +void GPUInfo::setRawIntensity(size_t rawIntensity) +{ + m_rawIntensity = rawIntensity; +} + +size_t GPUInfo::getWorkSize() const +{ + return m_workSize; +} + +void GPUInfo::setWorkSize(size_t workSize) +{ + m_workSize = workSize; +} + +size_t GPUInfo::getMaxWorkSize() const +{ + return m_maxWorkSize; +} + +void GPUInfo::setMaxWorkSize(size_t maxWorkSize) +{ + m_maxWorkSize = maxWorkSize; +} + +size_t GPUInfo::getFreeMem() const +{ + return m_freeMem; +} + +void GPUInfo::setFreeMem(size_t freeMem) +{ + m_freeMem = freeMem; +} + +int GPUInfo::getMemChunk() const +{ + return m_memChunk; +} + +void GPUInfo::setMemChunk(int memChunk) +{ + m_memChunk = memChunk; +} + +int GPUInfo::getCompMode() const +{ + return m_compMode; +} + +void GPUInfo::setCompMode(int compMode) +{ + m_compMode = compMode; +} + +int GPUInfo::getComputeUnits() const +{ + return m_computeUnits; +} + +void GPUInfo::setComputeUnits(int computeUnits) +{ + m_computeUnits = computeUnits; +} + +std::string GPUInfo::getName() const +{ + return m_name; +} + +void GPUInfo::setName(const std::string& name) +{ + m_name = name; +} diff --git a/src/cc/GPUInfo.h b/src/cc/GPUInfo.h new file mode 100644 index 00000000..63194895 --- /dev/null +++ b/src/cc/GPUInfo.h @@ -0,0 +1,75 @@ +/* XMRigCC + * Copyright 2018- BenDr0id + * + * 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 . + */ + +#ifndef XMRIG_GPUINFO_H +#define XMRIG_GPUINFO_H + +#include +#include <3rdparty/rapidjson/document.h> + +class GPUInfo +{ +public: + GPUInfo(); + ~GPUInfo(); + + rapidjson::Value toJson(rapidjson::MemoryPoolAllocator& allocator); + bool parseFromJson(const rapidjson::Value& gpuInfo); + + std::string getName() const; + void setName(const std::string& name); + + size_t getDeviceIdx() const; + void setDeviceIdx(size_t deviceIdx); + + size_t getRawIntensity() const; + void setRawIntensity(size_t rawIntensity); + + size_t getWorkSize() const; + void setWorkSize(size_t workSize); + + size_t getMaxWorkSize() const; + void setMaxWorkSize(size_t maxWorkSize); + + size_t getFreeMem() const; + void setFreeMem(size_t freeMem); + + int getMemChunk() const; + void setMemChunk(int memChunk); + + int getCompMode() const; + void setCompMode(int compMode); + + int getComputeUnits() const; + void setComputeUnits(int computeUnits); + +private: + size_t m_deviceIdx; + size_t m_rawIntensity; + size_t m_workSize; + size_t m_maxWorkSize; + size_t m_freeMem; + + int m_memChunk; + int m_compMode; + int m_computeUnits; + + std::string m_name; +}; + + +#endif //XMRIG_GPUINFO_H diff --git a/src/cc/README.md b/src/cc/README.md deleted file mode 100644 index f414dfa6..00000000 --- a/src/cc/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# XMRigCC common repository -This repository contains all common XMRigCC files. - -# Used in this repos -* [xmrigCC](https://github.com/bendr0id/xmrigCC) -* [xmrigCC-nvidia](https://github.com/bendr0id/xmrigCC-nvidia) -