Fixed generic OpenCL code for AMD Navi

This commit is contained in:
SChernykh 2020-02-10 22:00:40 +01:00
parent aacdbc360b
commit ef629ba0d0
5 changed files with 1969 additions and 1949 deletions

View file

@ -49,6 +49,7 @@ bool ocl_generic_rx_generator(const OclDevice &device, const Algorithm &algorith
const size_t mem = device.globalMemSize();
auto config = RxAlgo::base(algorithm);
bool gcnAsm = false;
bool isNavi = false;
switch (device.type()) {
case OclDevice::Baffin:
@ -59,6 +60,12 @@ bool ocl_generic_rx_generator(const OclDevice &device, const Algorithm &algorith
gcnAsm = true;
break;
case OclDevice::Navi_10:
case OclDevice::Navi_12:
case OclDevice::Navi_14:
isNavi = true;
break;
default:
break;
}
@ -75,8 +82,9 @@ bool ocl_generic_rx_generator(const OclDevice &device, const Algorithm &algorith
uint32_t intensity = static_cast<uint32_t>((mem - (datasetHost ? 0 : dataset_mem)) / per_thread_mem / 2);
// Too high intensity makes hashrate worse
if (intensity > device.computeUnits() * 16) {
intensity = device.computeUnits() * 16;
const uint32_t intensityCoeff = isNavi ? 64 : 16;
if (intensity > device.computeUnits() * intensityCoeff) {
intensity = device.computeUnits() * intensityCoeff;
}
intensity -= intensity % 64;