Browse Source

wip

cl-refactor
Jan Willem Penterman 10 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());
}
}
#if ETH_ETHASHCU || !ETH_TRUE
else if (arg == "--cuda-devices") {
while (m_cudaDeviceCount < 16 && i + 1 < argc)
{
@ -310,6 +311,7 @@ public:
else if (arg == "--cuda-high-cpu") {
m_cudaHighCPULoad = true;
}
#endif
else
return false;
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 device_count;
device_count = get_num_devices();
device_count = getNumDevices();
if (device_count == 0)
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;
@ -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)
{
int device_count = get_num_devices();
int device_count = getNumDevices();
if (device_count == 0)
return false;

15
libethash-cu/ethash_cu_miner.h

@ -1,6 +1,6 @@
#pragma once
#include <cuda_runtime.h>
//#include <cuda_runtime.h>
#include <time.h>
#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);
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 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 CPUMiner
* typename GPUMiner
* typename CUDAMiner
* and a few others. TODO
*/
class BasicAuthority

1
libethcore/Ethash.cpp

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

2
libethcore/Ethash.h

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

14
libethcore/EthashCUDAMiner.cpp

@ -14,7 +14,7 @@
You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file EthashGPUMiner.cpp
/** @file EthashCUDAMiner.cpp
* @author Gav Wood <i@gavwood.com>
* @date 2014
*
@ -107,7 +107,7 @@ unsigned EthashCUDAMiner::s_numInstances = 0;
EthashCUDAMiner::EthashCUDAMiner(ConstructionInfo const& _ci) :
GenericMiner<EthashProofOfWork>(_ci),
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);
m_miner->search(w.headerHash.data(), upper64OfBoundary, *m_hook);
}
catch (cl::Error const& _e)
catch (std::runtime_error const& _e)
{
delete m_miner;
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()
{
return ethash_cl_miner::platform_info(s_platformId, s_deviceId);
return ethash_cu_miner::platform_info(s_deviceId);
}
unsigned EthashCUDAMiner::getNumDevices()
{
return ethash_cl_miner::getNumDevices(s_platformId);
return ethash_cu_miner::getNumDevices();
}
void EthashCUDAMiner::listDevices()
{
return ethash_cl_miner::listDevices();
return ethash_cu_miner::listDevices();
}
bool EthashCUDAMiner::configureGPU(

8
libethcore/EthashCUDAMiner.h

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

7
libethcore/EthashSealEngine.cpp

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

Loading…
Cancel
Save