Skip to content
This repository was archived by the owner on Apr 24, 2022. It is now read-only.

Commit 3ef76aa

Browse files
authoredMar 24, 2020
Merge pull request #1977 from miscellaneousbits/master
AMD max. 4 GB per allocation workaround for 8GB cards
2 parents 8b856ab + fe7efc4 commit 3ef76aa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+97
-67
lines changed
 

‎libethash-cl/CLMiner.cpp

+16-12
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ struct CLChannel : public LogChannel
3131
static const bool debug = false;
3232
};
3333
#define cllog clog(CLChannel)
34-
#define ETHCL_LOG(_contents) cllog << _contents
3534

3635
/**
3736
* Returns the name of a numerical cl_int error
@@ -372,8 +371,9 @@ void CLMiner::workLoop()
372371
m_searchKernel.setArg(0, m_searchBuffer[0]); // Supply output buffer to kernel.
373372
m_searchKernel.setArg(1, m_header[0]); // Supply header buffer to kernel.
374373
m_searchKernel.setArg(2, m_dag[0]); // Supply DAG buffer to kernel.
375-
m_searchKernel.setArg(3, m_dagItems);
376-
m_searchKernel.setArg(5, target);
374+
m_searchKernel.setArg(3, m_dag[1]); // Supply DAG buffer to kernel.
375+
m_searchKernel.setArg(4, m_dagItems);
376+
m_searchKernel.setArg(6, target);
377377

378378
#ifdef DEV_BUILD
379379
if (g_logOptions & LOG_SWITCH)
@@ -386,7 +386,7 @@ void CLMiner::workLoop()
386386
}
387387

388388
// Run the kernel.
389-
m_searchKernel.setArg(4, startNonce);
389+
m_searchKernel.setArg(5, startNonce);
390390
m_queue[0].enqueueNDRangeKernel(
391391
m_searchKernel, cl::NullRange, m_settings.globalWorkSize, m_settings.localWorkSize);
392392

@@ -696,7 +696,8 @@ bool CLMiner::initEpoch_internal()
696696
// Eventually resume mining when changing coin or epoch (NiceHash)
697697
}
698698

699-
cllog << "Generating DAG + Light : " << dev::getFormattedMemory((double)RequiredMemory);
699+
cllog << "Generating split DAG + Light (total): "
700+
<< dev::getFormattedMemory((double)RequiredMemory);
700701

701702
try
702703
{
@@ -746,6 +747,7 @@ bool CLMiner::initEpoch_internal()
746747
if (!m_settings.noExit)
747748
addDefinition(code, "FAST_EXIT", 1);
748749

750+
749751
// create miner OpenCL program
750752
cl::Program::Sources sources{{code.data(), code.size()}};
751753
cl::Program program(m_context[0], sources), binaryProgram;
@@ -778,7 +780,7 @@ bool CLMiner::initEpoch_internal()
778780
std::transform(device_name.begin(), device_name.end(), device_name.begin(), ::tolower);
779781
fname_strm << boost::dll::program_location().parent_path().string()
780782
<< "/kernels/ethash_" << device_name << "_lws" << m_settings.localWorkSize
781-
<< (m_settings.noExit ? ".bin" : "_exit.bin");
783+
<< (m_settings.noExit ? "" : "_exit") << ".bin";
782784
cllog << "Loading binary kernel " << fname_strm.str();
783785
try
784786
{
@@ -837,7 +839,8 @@ bool CLMiner::initEpoch_internal()
837839
<< dev::getFormattedMemory(
838840
(double)(m_deviceDescriptor.totalMemory - RequiredMemory));
839841
m_dag.clear();
840-
m_dag.push_back(cl::Buffer(m_context[0], CL_MEM_READ_ONLY, m_epochContext.dagSize));
842+
m_dag.push_back(cl::Buffer(m_context[0], CL_MEM_READ_ONLY, m_epochContext.dagSize / 2));
843+
m_dag.push_back(cl::Buffer(m_context[0], CL_MEM_READ_ONLY, m_epochContext.dagSize / 2));
841844
cllog << "Loading kernels";
842845

843846
// If we have a binary kernel to use, let's try it
@@ -849,7 +852,6 @@ bool CLMiner::initEpoch_internal()
849852

850853
m_dagKernel = cl::Kernel(program, "GenerateDAG");
851854

852-
cllog << "Writing light cache buffer";
853855
m_queue[0].enqueueWriteBuffer(
854856
m_light[0], CL_TRUE, 0, m_epochContext.lightSize, m_epochContext.lightCache);
855857
}
@@ -860,22 +862,24 @@ bool CLMiner::initEpoch_internal()
860862
return true;
861863
}
862864
// create buffer for header
863-
ETHCL_LOG("Creating buffer for header.");
865+
cllog << "Creating buffer for header.";
864866
m_header.clear();
865867
m_header.push_back(cl::Buffer(m_context[0], CL_MEM_READ_ONLY, 32));
866868

867869
m_searchKernel.setArg(1, m_header[0]);
868870
m_searchKernel.setArg(2, m_dag[0]);
869-
m_searchKernel.setArg(3, m_dagItems);
871+
m_searchKernel.setArg(3, m_dag[1]);
872+
m_searchKernel.setArg(4, m_dagItems);
870873

871874
// create mining buffers
872-
ETHCL_LOG("Creating mining buffer");
875+
cllog << "Creating mining buffer";
873876
m_searchBuffer.clear();
874877
m_searchBuffer.emplace_back(m_context[0], CL_MEM_WRITE_ONLY, sizeof(SearchResults));
875878

876879
m_dagKernel.setArg(1, m_light[0]);
877880
m_dagKernel.setArg(2, m_dag[0]);
878-
m_dagKernel.setArg(3, (uint32_t)(m_epochContext.lightSize / 64));
881+
m_dagKernel.setArg(3, m_dag[1]);
882+
m_dagKernel.setArg(4, (uint32_t)(m_epochContext.lightSize / 64));
879883

880884
const uint32_t workItems = m_dagItems * 2; // GPU computes partial 512-bit DAG items.
881885

‎libethash-cl/kernels/Makefile

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ASFLAGS=-I$(SDIR)
55
AS=clrxasm
66

77
.PHONY: all
8-
all: ellesmere tonga baffin gfx900 gfx901
8+
all: ellesmere tonga baffin gfx900 gfx901 gfx906
99
@echo "Built ethash kernel for Ellesmere, Tonga, Baffin, Gfx900 and Gfx901 architectures."
1010

1111
.PHONY: clean
@@ -37,3 +37,7 @@ gfx900: gfx900_lws64.bin gfx900_lws128.bin gfx900_lws256.bin
3737
.PHONY: gfx901
3838
gfx901: gfx901_lws64.bin gfx901_lws128.bin gfx901_lws256.bin
3939
@echo "Built gfx901 kernels..."
40+
41+
.PHONY: gfx906
42+
gfx906: gfx906_lws64.bin gfx906_lws128.bin gfx906_lws256.bin
43+
@echo "Built gfx906 kernels..."

0 commit comments

Comments
 (0)
This repository has been archived.