From e8ee091e5ac43b649eca6b25a1aaf2fbdd6262ac Mon Sep 17 00:00:00 2001 From: XMRig Date: Thu, 19 Sep 2019 02:05:42 +0700 Subject: [PATCH] Fixes for Intel OpenCL platform. --- .../opencl/generators/ocl_generic_cn_generator.cpp | 10 ++++++++-- .../opencl/generators/ocl_generic_rx_generator.cpp | 2 +- src/backend/opencl/runners/OclBaseRunner.cpp | 2 +- src/backend/opencl/runners/OclCnRunner.cpp | 1 - 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/backend/opencl/generators/ocl_generic_cn_generator.cpp b/src/backend/opencl/generators/ocl_generic_cn_generator.cpp index 52ab3210..5fb91ebf 100644 --- a/src/backend/opencl/generators/ocl_generic_cn_generator.cpp +++ b/src/backend/opencl/generators/ocl_generic_cn_generator.cpp @@ -45,7 +45,13 @@ static inline uint32_t getMaxThreads(const OclDevice &device, const Algorithm &a return 40000u; } - return ((algorithm.l3() <= oneMiB) ? 2u : 1u) * 1000u; + const uint32_t ratio = (algorithm.l3() <= oneMiB) ? 2u : 1u; + + if (device.vendorId() == OCL_VENDOR_INTEL) { + return ratio * device.computeUnits() * 8; + } + + return ratio * 1000u; } @@ -107,7 +113,7 @@ bool ocl_generic_cn_generator(const OclDevice &device, const Algorithm &algorith return false; } - const uint32_t threadCount = ((device.globalMemSize() - intensity * 2 * algorithm.l3()) > 128 * oneMiB) ? 2 : 1; + const uint32_t threadCount = (device.vendorId() == OCL_VENDOR_AMD && (device.globalMemSize() - intensity * 2 * algorithm.l3()) > 128 * oneMiB) ? 2 : 1; threads.add(OclThread(device.index(), intensity, 8, getStridedIndex(device, algorithm), 2, threadCount, 8)); diff --git a/src/backend/opencl/generators/ocl_generic_rx_generator.cpp b/src/backend/opencl/generators/ocl_generic_rx_generator.cpp index 022f489c..dbe8d5f1 100644 --- a/src/backend/opencl/generators/ocl_generic_rx_generator.cpp +++ b/src/backend/opencl/generators/ocl_generic_rx_generator.cpp @@ -86,7 +86,7 @@ bool ocl_generic_rx_generator(const OclDevice &device, const Algorithm &algorith return false; } - threads.add(OclThread(device.index(), intensity, 8, 2, gcnAsm, datasetHost, 6)); + threads.add(OclThread(device.index(), intensity, 8, device.vendorId() == OCL_VENDOR_AMD ? 2 : 1, gcnAsm, datasetHost, 6)); return true; } diff --git a/src/backend/opencl/runners/OclBaseRunner.cpp b/src/backend/opencl/runners/OclBaseRunner.cpp index b0149f34..71b35edc 100644 --- a/src/backend/opencl/runners/OclBaseRunner.cpp +++ b/src/backend/opencl/runners/OclBaseRunner.cpp @@ -98,7 +98,7 @@ void xmrig::OclBaseRunner::init() constexpr size_t oneGiB = 1024 * 1024 * 1024; size_t size = bufferSize(); - if (size < oneGiB && data().device.freeMemSize() >= oneGiB) { + if (size < oneGiB && data().device.vendorId() == OCL_VENDOR_AMD && data().device.freeMemSize() >= oneGiB) { size = oneGiB; } diff --git a/src/backend/opencl/runners/OclCnRunner.cpp b/src/backend/opencl/runners/OclCnRunner.cpp index 8e58ac54..2fbc5287 100644 --- a/src/backend/opencl/runners/OclCnRunner.cpp +++ b/src/backend/opencl/runners/OclCnRunner.cpp @@ -75,7 +75,6 @@ xmrig::OclCnRunner::~OclCnRunner() } if (m_algorithm == Algorithm::CN_R) { - OclLib::release(m_cnr); OclCnR::clear(); } }