From 23be7f308d384d2db4ebf2b8c2f6552f5839f579 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 12 Jan 2017 22:40:31 +0100 Subject: [PATCH] xmr: link the --bfactor setting (0-11) --- README.txt | 11 ++++++++--- algos.h | 2 ++ ccminer.cpp | 40 ++++++++++++++++++++++++++++++++++---- crypto/cryptolight-core.cu | 17 +++++----------- crypto/cryptonight-core.cu | 18 ++++------------- 5 files changed, 55 insertions(+), 33 deletions(-) diff --git a/README.txt b/README.txt index 9202260..b7bcc04 100644 --- a/README.txt +++ b/README.txt @@ -57,7 +57,7 @@ Vertcoin Lyra2RE Ziftrcoin (ZR5) Boolberry (Wild Keccak) Monero (Cryptonight) -Aeon (Cryptonight-light) +Aeon (Cryptonight-lite) where some of these coins have a VERY NOTABLE nVidia advantage over competing AMD (OpenCL Only) implementations. @@ -193,11 +193,16 @@ Scrypt specific options: cache for mining. Kepler devices may profit. --no-autotune disable auto-tuning of kernel launch parameters - -XMR and Wildkeccak specific: +CryptoNight specific options: -l, --launch-config gives the launch configuration for each kernel in a comma separated list, one per device. + --bfactor=[0-12] Run Cryptonight core kernel in smaller pieces, + From 0 (ui freeze) to 12 (smooth), win default is 11 + This is a per-device setting like the launch config. + Wildkeccak specific: + -l, --launch-config gives the launch configuration for each kernel + in a comma separated list, one per device. -k, --scratchpad url Url used to download the scratchpad cache. diff --git a/algos.h b/algos.h index f90aa92..687132c 100644 --- a/algos.h +++ b/algos.h @@ -127,6 +127,8 @@ static inline int algo_to_int(char* arg) i = ALGO_AUTO; else if (!strcasecmp("cryptonight-light", arg)) i = ALGO_CRYPTOLIGHT; + else if (!strcasecmp("cryptonight-lite", arg)) + i = ALGO_CRYPTOLIGHT; else if (!strcasecmp("flax", arg)) i = ALGO_C11; else if (!strcasecmp("diamond", arg)) diff --git a/ccminer.cpp b/ccminer.cpp index 4721a45..8db1685 100644 --- a/ccminer.cpp +++ b/ccminer.cpp @@ -146,7 +146,8 @@ int device_singlememory[MAX_GPUS] = { 0 }; // implemented scrypt options int parallel = 2; // All should be made on GPU char *device_config[MAX_GPUS] = { 0 }; -int device_backoff[MAX_GPUS] = { 0 }; +int device_backoff[MAX_GPUS] = { 0 }; // scrypt +int device_bfactor[MAX_GPUS] = { 0 }; // cryptonight int device_lookup_gap[MAX_GPUS] = { 0 }; int device_interactive[MAX_GPUS] = { 0 }; int opt_nfactor = 0; @@ -371,8 +372,9 @@ struct option options[] = { { "interactive", 1, NULL, 1050 }, // scrypt { "lookup-gap", 1, NULL, 'L' }, // scrypt { "texture-cache", 1, NULL, 1051 },// scrypt - { "launch-config", 1, NULL, 'l' }, // scrypt & bbr + { "launch-config", 1, NULL, 'l' }, // scrypt bbr xmr { "scratchpad", 1, NULL, 'k' }, // bbr + { "bfactor", 1, NULL, 1055 }, // xmr { "max-temp", 1, NULL, 1060 }, { "max-diff", 1, NULL, 1061 }, { "max-rate", 1, NULL, 1062 }, @@ -442,7 +444,16 @@ Scrypt specific options:\n\ "; static char const xmr_usage[] = "\n\ -CryptoNote specific options:\n\ +CryptoNight specific options:\n\ + -l, --launch-config gives the launch configuration for each kernel\n\ + in a comma separated list, one per device.\n\ + --bfactor=[0-12] Run Cryptonight core kernel in smaller pieces,\n\ + From 0 (ui freeze) to 12 (smooth), win default is 11\n\ + This is a per-device setting like the launch config.\n\ +"; + +static char const bbr_usage[] = "\n\ +Boolberry specific options:\n\ -l, --launch-config gives the launch configuration for each kernel\n\ in a comma separated list, one per device.\n\ -k, --scratchpad url Url used to download the scratchpad cache.\n\ @@ -2441,6 +2452,7 @@ static void *miner_thread(void *userdata) if (opt_led_mode == LED_MODE_SHARES) gpu_led_percent(dev_id, 50); + work.submit_nonce_id = 0; nonceptr[0] = work.nonces[0]; if (!submit_work(mythr, &work)) break; @@ -2468,6 +2480,7 @@ static void *miner_thread(void *userdata) if (!submit_work(mythr, &work)) break; nonceptr[0] = curnonce; + work.nonces[1] = 0; // reset } } } @@ -2852,12 +2865,16 @@ static void show_usage_and_exit(int status) fprintf(stderr, "Try `" PROGRAM_NAME " --help' for more information.\n"); else printf(usage); + if (opt_algo == ALGO_SCRYPT || opt_algo == ALGO_SCRYPT_JANE) { printf(scrypt_usage); } - if (opt_algo == ALGO_CRYPTONIGHT || opt_algo == ALGO_CRYPTOLIGHT || opt_algo == ALGO_WILDKECCAK) { + else if (opt_algo == ALGO_CRYPTONIGHT || opt_algo == ALGO_CRYPTOLIGHT) { printf(xmr_usage); } + else if (opt_algo == ALGO_WILDKECCAK) { + printf(bbr_usage); + } proper_exit(status); } @@ -3187,6 +3204,20 @@ void parse_arg(int key, char *arg) device_texturecache[n++] = last; } break; + case 1055: /* cryptonight --bfactor */ + { + char *pch = strtok(arg, ","); + int n = 0, last = atoi(arg); + while (pch != NULL) { + last = atoi(pch); + if (last > 15) last = 15; + device_bfactor[n++] = last; + pch = strtok(NULL, ","); + } + while (n < MAX_GPUS) + device_bfactor[n++] = last; + } + break; case 1070: /* --gpu-clock */ { char *pch = strtok(arg,","); @@ -3659,6 +3690,7 @@ int main(int argc, char *argv[]) device_name[i] = NULL; device_config[i] = NULL; device_backoff[i] = is_windows() ? 12 : 2; + device_bfactor[i] = is_windows() ? 11 : 0; device_lookup_gap[i] = 1; device_batchsize[i] = 1024; device_interactive[i] = -1; diff --git a/crypto/cryptolight-core.cu b/crypto/cryptolight-core.cu index 26cb05c..b381e30 100644 --- a/crypto/cryptolight-core.cu +++ b/crypto/cryptolight-core.cu @@ -4,20 +4,11 @@ #include #include -#include -#include - #include "cryptolight.h" #define LONG_SHL_IDX 18 #define LONG_LOOPS32 0x40000 -#ifdef WIN32 -static __thread int cn_bfactor = 11; -static __thread int cn_bsleep = 100; -#else -static __thread int cn_bfactor = 0; -static __thread int cn_bsleep = 0; -#endif +extern int device_backoff[MAX_GPUS]; #include "cn_aes.cuh" @@ -259,6 +250,8 @@ void cryptolight_core_gpu_phase3(int threads, const uint32_t * __restrict__ long } } +extern int device_bfactor[MAX_GPUS]; + __host__ void cryptolight_core_cpu_hash(int thr_id, int blocks, int threads, uint32_t *d_long_state, uint32_t *d_ctx_state, uint32_t *d_ctx_a, uint32_t *d_ctx_b, uint32_t *d_ctx_key1, uint32_t *d_ctx_key2) { @@ -267,8 +260,8 @@ void cryptolight_core_cpu_hash(int thr_id, int blocks, int threads, uint32_t *d_ dim3 block4(threads << 2); dim3 block8(threads << 3); - const int bfactor = cn_bfactor; // device_bfactor[thr_id]; - const int bsleep = cn_bsleep; //device_bsleep[thr_id]; + const int bfactor = device_bfactor[thr_id]; + const int bsleep = bfactor ? 100 : 0; int i, partcount = 1 << bfactor; int dev_id = device_map[thr_id]; diff --git a/crypto/cryptonight-core.cu b/crypto/cryptonight-core.cu index d43f10e..42c1f09 100644 --- a/crypto/cryptonight-core.cu +++ b/crypto/cryptonight-core.cu @@ -4,22 +4,10 @@ #include #include -#include -#include - #include "cryptonight.h" #define LONG_SHL_IDX 19 #define LONG_LOOPS32 0x80000 -#ifdef WIN32 -// to prevent ui freeze -static __thread int cn_bfactor = 11; -static __thread int cn_bsleep = 100; -#else -static __thread int cn_bfactor = 0; -static __thread int cn_bsleep = 0; -#endif - #include "cn_aes.cuh" #define MUL_SUM_XOR_DST(a,c,dst) { \ @@ -264,6 +252,8 @@ void cryptonight_core_gpu_phase3(int threads, const uint32_t * __restrict__ long } } +extern int device_bfactor[MAX_GPUS]; + __host__ void cryptonight_core_cpu_hash(int thr_id, int blocks, int threads, uint32_t *d_long_state, uint32_t *d_ctx_state, uint32_t *d_ctx_a, uint32_t *d_ctx_b, uint32_t *d_ctx_key1, uint32_t *d_ctx_key2) { @@ -272,8 +262,8 @@ void cryptonight_core_cpu_hash(int thr_id, int blocks, int threads, uint32_t *d_ dim3 block4(threads << 2); dim3 block8(threads << 3); - const int bfactor = cn_bfactor; // device_bfactor[thr_id]; - const int bsleep = cn_bsleep; //device_bsleep[thr_id]; + const int bfactor = device_bfactor[thr_id]; + const int bsleep = bfactor ? 100 : 0; int i, partcount = 1 << bfactor; int dev_id = device_map[thr_id];