Browse Source

wip

cl-refactor
Jan Willem Penterman 9 years ago
parent
commit
c4b1f68365
  1. 2
      ethminer/MinerAux.h
  2. 6
      libethash-cu/ethash_cu_miner.cpp
  3. 15
      libethash-cu/ethash_cu_miner.h
  4. 1
      libethcore/BasicAuthority.h
  5. 1
      libethcore/Ethash.cpp
  6. 2
      libethcore/Ethash.h
  7. 14
      libethcore/EthashCUDAMiner.cpp
  8. 8
      libethcore/EthashCUDAMiner.h
  9. 7
      libethcore/EthashSealEngine.cpp

2
ethminer/MinerAux.h

@ -295,6 +295,7 @@ public:
BOOST_THROW_EXCEPTION(BadArgument()); BOOST_THROW_EXCEPTION(BadArgument());
} }
} }
#if ETH_ETHASHCU || !ETH_TRUE
else if (arg == "--cuda-devices") { else if (arg == "--cuda-devices") {
while (m_cudaDeviceCount < 16 && i + 1 < argc) while (m_cudaDeviceCount < 16 && i + 1 < argc)
{ {
@ -310,6 +311,7 @@ public:
else if (arg == "--cuda-high-cpu") { else if (arg == "--cuda-high-cpu") {
m_cudaHighCPULoad = true; m_cudaHighCPULoad = true;
} }
#endif
else else
return false; return false;
return true; return true;

6
libethash-cu/ethash_cu_miner.cpp

@ -65,7 +65,7 @@ std::string ethash_cu_miner::platform_info(unsigned _deviceId)
int runtime_version; int runtime_version;
int device_count; int device_count;
device_count = get_num_devices(); device_count = getNumDevices();
if (device_count == 0) if (device_count == 0)
return std::string(); return std::string();
@ -99,7 +99,7 @@ std::string ethash_cu_miner::platform_info(unsigned _deviceId)
} }
int ethash_cu_miner::get_num_devices() int ethash_cu_miner::getNumDevices()
{ {
int device_count; int device_count;
@ -123,7 +123,7 @@ void ethash_cu_miner::finish()
bool ethash_cu_miner::init(uint8_t const* _dag, uint64_t _dagSize, unsigned num_buffers, unsigned search_batch_size, unsigned workgroup_size, unsigned _deviceId, bool highcpu) bool ethash_cu_miner::init(uint8_t const* _dag, uint64_t _dagSize, unsigned num_buffers, unsigned search_batch_size, unsigned workgroup_size, unsigned _deviceId, bool highcpu)
{ {
int device_count = get_num_devices(); int device_count = getNumDevices();
if (device_count == 0) if (device_count == 0)
return false; return false;

15
libethash-cu/ethash_cu_miner.h

@ -1,6 +1,6 @@
#pragma once #pragma once
#include <cuda_runtime.h> //#include <cuda_runtime.h>
#include <time.h> #include <time.h>
#include <functional> #include <functional>
@ -24,8 +24,17 @@ public:
bool init(uint8_t const* _dag, uint64_t _dagSize, unsigned num_buffers = 2, unsigned search_batch_size = 262144, unsigned workgroup_size = 64, unsigned _deviceId = 0, bool highcpu = false); bool init(uint8_t const* _dag, uint64_t _dagSize, unsigned num_buffers = 2, unsigned search_batch_size = 262144, unsigned workgroup_size = 64, unsigned _deviceId = 0, bool highcpu = false);
static std::string platform_info(unsigned _deviceId = 0); static std::string platform_info(unsigned _deviceId = 0);
static int get_num_devices(); static int getNumDevices();
static void listDevices();
static bool configureGPU(
unsigned _platformId,
unsigned _localWorkSize,
unsigned _globalWorkSize,
unsigned _msPerBatch,
bool _allowCPU,
unsigned _extraGPUMemory,
uint64_t _currentBlock
);
void finish(); void finish();
void hash(uint8_t* ret, uint8_t const* header, uint64_t nonce, unsigned count); void hash(uint8_t* ret, uint8_t const* header, uint64_t nonce, unsigned count);

1
libethcore/BasicAuthority.h

@ -45,6 +45,7 @@ namespace eth
* typename Solution * typename Solution
* typename CPUMiner * typename CPUMiner
* typename GPUMiner * typename GPUMiner
* typename CUDAMiner
* and a few others. TODO * and a few others. TODO
*/ */
class BasicAuthority class BasicAuthority

1
libethcore/Ethash.cpp

@ -45,6 +45,7 @@
#include "EthashSealEngine.h" #include "EthashSealEngine.h"
#include "EthashCPUMiner.h" #include "EthashCPUMiner.h"
#include "EthashGPUMiner.h" #include "EthashGPUMiner.h"
#include "EthashCUDAMiner.h"
using namespace std; using namespace std;
using namespace std::chrono; using namespace std::chrono;

2
libethcore/Ethash.h

@ -33,6 +33,7 @@
#include "Sealer.h" #include "Sealer.h"
class ethash_cl_miner; class ethash_cl_miner;
class ethash_cu_miner;
namespace dev namespace dev
{ {
@ -45,6 +46,7 @@ namespace eth
class BlockInfo; class BlockInfo;
class EthashCLHook; class EthashCLHook;
class EthashCUHook;
class Ethash class Ethash
{ {

14
libethcore/EthashCUDAMiner.cpp

@ -14,7 +14,7 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>. along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** @file EthashGPUMiner.cpp /** @file EthashCUDAMiner.cpp
* @author Gav Wood <i@gavwood.com> * @author Gav Wood <i@gavwood.com>
* @date 2014 * @date 2014
* *
@ -107,7 +107,7 @@ unsigned EthashCUDAMiner::s_numInstances = 0;
EthashCUDAMiner::EthashCUDAMiner(ConstructionInfo const& _ci) : EthashCUDAMiner::EthashCUDAMiner(ConstructionInfo const& _ci) :
GenericMiner<EthashProofOfWork>(_ci), GenericMiner<EthashProofOfWork>(_ci),
Worker("cudaminer" + toString(index())), Worker("cudaminer" + toString(index())),
m_hook(new EthashCUDAMiner(this)) m_hook( new EthashCUHook(this))
{ {
} }
@ -170,11 +170,11 @@ void EthashCUDAMiner::workLoop()
uint64_t upper64OfBoundary = (uint64_t)(u64)((u256)w.boundary >> 192); uint64_t upper64OfBoundary = (uint64_t)(u64)((u256)w.boundary >> 192);
m_miner->search(w.headerHash.data(), upper64OfBoundary, *m_hook); m_miner->search(w.headerHash.data(), upper64OfBoundary, *m_hook);
} }
catch (cl::Error const& _e) catch (std::runtime_error const& _e)
{ {
delete m_miner; delete m_miner;
m_miner = nullptr; m_miner = nullptr;
cwarn << "Error GPU mining: " << _e.what() << "(" << _e.err() << ")"; cwarn << "Error CUDA mining: " << _e.what();
} }
} }
@ -186,17 +186,17 @@ void EthashCUDAMiner::pause()
std::string EthashCUDAMiner::platformInfo() std::string EthashCUDAMiner::platformInfo()
{ {
return ethash_cl_miner::platform_info(s_platformId, s_deviceId); return ethash_cu_miner::platform_info(s_deviceId);
} }
unsigned EthashCUDAMiner::getNumDevices() unsigned EthashCUDAMiner::getNumDevices()
{ {
return ethash_cl_miner::getNumDevices(s_platformId); return ethash_cu_miner::getNumDevices();
} }
void EthashCUDAMiner::listDevices() void EthashCUDAMiner::listDevices()
{ {
return ethash_cl_miner::listDevices(); return ethash_cu_miner::listDevices();
} }
bool EthashCUDAMiner::configureGPU( bool EthashCUDAMiner::configureGPU(

8
libethcore/EthashCUDAMiner.h

@ -14,7 +14,7 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>. along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** @file EthashGPUMiner.h /** @file EthashCUDAMiner.h
* @author Gav Wood <i@gavwood.com> * @author Gav Wood <i@gavwood.com>
* @date 2014 * @date 2014
* *
@ -35,7 +35,7 @@ namespace eth
class EthashCUDAMiner : public GenericMiner<EthashProofOfWork>, Worker class EthashCUDAMiner : public GenericMiner<EthashProofOfWork>, Worker
{ {
friend class dev::eth::EthashCLHook; friend class dev::eth::EthashCUHook;
public: public:
EthashCUDAMiner(ConstructionInfo const& _ci); EthashCUDAMiner(ConstructionInfo const& _ci);
@ -67,8 +67,8 @@ private:
using GenericMiner<EthashProofOfWork>::accumulateHashes; using GenericMiner<EthashProofOfWork>::accumulateHashes;
EthashCLHook* m_hook = nullptr; EthashCUHook* m_hook = nullptr;
ethash_cl_miner* m_miner = nullptr; ethash_cu_miner* m_miner = nullptr;
h256 m_minerSeed; ///< Last seed in m_miner h256 m_minerSeed; ///< Last seed in m_miner
static unsigned s_platformId; static unsigned s_platformId;

7
libethcore/EthashSealEngine.cpp

@ -24,6 +24,7 @@
#include "EthashSealEngine.h" #include "EthashSealEngine.h"
#include "EthashCPUMiner.h" #include "EthashCPUMiner.h"
#include "EthashGPUMiner.h" #include "EthashGPUMiner.h"
#include "EthashCUDAMiner.h"
using namespace std; using namespace std;
using namespace dev; using namespace dev;
using namespace eth; using namespace eth;
@ -34,6 +35,9 @@ EthashSealEngine::EthashSealEngine()
sealers["cpu"] = GenericFarm<EthashProofOfWork>::SealerDescriptor{&EthashCPUMiner::instances, [](GenericMiner<EthashProofOfWork>::ConstructionInfo ci){ return new EthashCPUMiner(ci); }}; sealers["cpu"] = GenericFarm<EthashProofOfWork>::SealerDescriptor{&EthashCPUMiner::instances, [](GenericMiner<EthashProofOfWork>::ConstructionInfo ci){ return new EthashCPUMiner(ci); }};
#if ETH_ETHASHCL #if ETH_ETHASHCL
sealers["opencl"] = GenericFarm<EthashProofOfWork>::SealerDescriptor{&EthashGPUMiner::instances, [](GenericMiner<EthashProofOfWork>::ConstructionInfo ci){ return new EthashGPUMiner(ci); }}; sealers["opencl"] = GenericFarm<EthashProofOfWork>::SealerDescriptor{&EthashGPUMiner::instances, [](GenericMiner<EthashProofOfWork>::ConstructionInfo ci){ return new EthashGPUMiner(ci); }};
#endif
#if ETH_ETHASHCU
sealers["cuda"] = GenericFarm<EthashProofOfWork>::SealerDescriptor{ &EthashCUDAMiner::instances, [](GenericMiner<EthashProofOfWork>::ConstructionInfo ci){ return new EthashCUDAMiner(ci); } };
#endif #endif
m_farm.setSealers(sealers); m_farm.setSealers(sealers);
} }
@ -44,6 +48,9 @@ strings EthashSealEngine::sealers() const
"cpu" "cpu"
#if ETH_ETHASHCL #if ETH_ETHASHCL
, "opencl" , "opencl"
#endif
#if ETH_ETHASHCU
, "cuda"
#endif #endif
}; };
} }

Loading…
Cancel
Save