diff --git a/src/Cuda/xpmclient.cpp b/src/Cuda/xpmclient.cpp index eac7b6d..14a3886 100644 --- a/src/Cuda/xpmclient.cpp +++ b/src/Cuda/xpmclient.cpp @@ -24,6 +24,7 @@ #include "prime.h" #include #include +#include void _blkmk_bin2hex(char *out, void *data, size_t datasz) { unsigned char *datac = (unsigned char *)data; @@ -287,6 +288,7 @@ void PrimeMiner::Mining(GetBlockTemplateContext* gbp, SubmitContext* submit) { cudaBuffer primeBuf[maxHashPrimorial]; cudaBuffer primeBuf2[maxHashPrimorial]; + printf("-----+----------------------test print at line 291\n"); CUevent sieveEvent; CUDA_SAFE_CALL(cuEventCreate(&sieveEvent, CU_EVENT_BLOCKING_SYNC)); @@ -700,7 +702,6 @@ void PrimeMiner::Mining(GetBlockTemplateContext* gbp, SubmitContext* submit) { work.multiplier[0] = buffer[3]; std::reverse_copy(buffer+4, buffer+4+buffer[3], work.multiplier+1); submit->submitBlock(workTemplate, work, dataId); - LOG_F(1, "GPU %d found share: %d-ch type %d", mID, chainlength, candi.type+1); if(isblock) LOG_F(1, "GPU %d found BLOCK!", mID); @@ -815,6 +816,21 @@ void initCmdLineOptions(option *options) options[clOptionLast] = {0, 0, 0, 0}; } +struct MineContext { + GetBlockTemplateContext *gbp; + SubmitContext *submit; + PrimeMiner* miner; + CUDADeviceInfo *device; + CUmodule *mod; +}; + +void* InvokeMining(void *arg) +{ + MineContext *ctx = (MineContext*)arg; + ctx->miner->Initialize(ctx->device->context, ctx->device->device, *(ctx->mod)); + ctx->miner->Mining(ctx->gbp, ctx->submit); +} + int main(int argc, char **argv) { srand(time(0)); blkmk_sha256_impl = sha256; @@ -885,8 +901,8 @@ int main(int argc, char **argv) { exit(1); } printf("block sum is %d\n", gThreadsNum); - GetBlockTemplateContext* getblock = new GetBlockTemplateContext(0, gUrl, gUserName, gPassword, gWallet, 4, gThreadsNum, extraNonce); - getblock->run(); + GetBlockTemplateContext getblock(0, gUrl, gUserName, gPassword, gWallet, 4, gThreadsNum, extraNonce); + getblock.run(); blktemplate_t *workTemplate = 0; unsigned int dataId; bool hasChanged; @@ -896,8 +912,6 @@ int main(int argc, char **argv) { //} //printf("blocktemplate_rwrqwrqw %ld\n", (long int)workTemplate); //printf("block height %d\n", workTemplate->height); - - SubmitContext *submit = new SubmitContext(0, gUrl, gUserName, gPassword); { int np = sizeof(gPrimes)/sizeof(unsigned); @@ -920,7 +934,7 @@ int main(int argc, char **argv) { std::map mDeviceMap; std::map mDeviceMapRev; - for (unsigned i = 0; i < devicesNum; i++) { + for (unsigned i = 0; i < 1; i++) { char name[128]; CUDADeviceInfo info; mDeviceMap[i] = gpus.size(); @@ -988,10 +1002,15 @@ int main(int argc, char **argv) { } unsigned int sievePerRound = 5; + MineContext *mineCtx = new MineContext[gpus.size()]; for(unsigned i = 0; i < gpus.size(); ++i) { - PrimeMiner* miner = new PrimeMiner(i, gpus.size(), sievePerRound, depth, clKernelLSize); - miner->Initialize(gpus[i].context, gpus[i].device, modules[i]); - miner->Mining(getblock, submit); + pthread_t thread; + mineCtx[i].gbp = &getblock; + mineCtx[i].submit = new SubmitContext(0, gUrl, gUserName, gPassword); + mineCtx[i].miner = new PrimeMiner(i, gpus.size(), sievePerRound, depth, clKernelLSize); + mineCtx[i].device = &gpus[i]; + mineCtx[i].mod = &modules[i]; + pthread_create(&thread, 0, InvokeMining, &mineCtx[i]); } return 0;