From 50f08a3e5e2e8ba65450f700a2fee604b3a03879 Mon Sep 17 00:00:00 2001 From: tcatm Date: Sat, 5 Feb 2011 00:54:09 +0100 Subject: [PATCH] detect number of GPUs, start thread for every GPU --- miner.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/miner.c b/miner.c index f056e33..6fb436c 100644 --- a/miner.c +++ b/miner.c @@ -48,6 +48,7 @@ static int opt_n_threads = 1; static char *rpc_url = DEF_RPC_URL; static char *userpass = DEF_RPC_USERPASS; +_clState *clStates[16]; struct option_help { const char *name; @@ -251,14 +252,8 @@ static void *miner_thread(void *thr_id_int) cl_int status; - _clState *clState; + _clState *clState = clStates[thr_id]; - char name[32]; - - printf("Init GPU %i\n", thr_id); - clState = initCl(thr_id, name, sizeof(name)); - printf("initCl() finished. Found %s\n", name); - status = clSetKernelArg(clState->kernel, 0, sizeof(cl_mem), (void *)&clState->inputBuffer); if(status != CL_SUCCESS) { printf("Error: Setting kernel argument 1.\n"); return false; } @@ -318,8 +313,6 @@ static void *miner_thread(void *thr_id_int) globalThreads[0] = threads; localThreads[0] = 128; - printf("%i\n", work[frame].blk.nonce); - status = clEnqueueWriteBuffer(clState->commandQueue, clState->inputBuffer, CL_TRUE, 0, sizeof(dev_blk_ctx), (void *)&work[frame].blk, 0, NULL, NULL); if(status != CL_SUCCESS) { printf("Error: clEnqueueWriteBuffer failed.\n"); return 0; } @@ -480,10 +473,16 @@ int main (int argc, char *argv[]) return nDevs; } + char name[32]; + /* start mining threads */ - for (i = 0; i < opt_n_threads; i++) { + for (i = 0; i < nDevs; i++) { pthread_t t; + printf("Init GPU %i\n", i); + clStates[i] = initCl(i, name, sizeof(name)); + printf("initCl() finished. Found %s\n", name); + if (pthread_create(&t, NULL, miner_thread, (void *)(unsigned long) i)) { fprintf(stderr, "thread %d create failed\n", i);