diff --git a/Algo256/blake256.cu b/Algo256/blake256.cu index 5ac3f832b..5b30d42d0 100644 --- a/Algo256/blake256.cu +++ b/Algo256/blake256.cu @@ -390,6 +390,7 @@ extern "C" int scanhash_blake256(int thr_id, uint32_t *pdata, const uint32_t *pt #endif int intensity = (device_sm[device_map[thr_id]] > 500) ? 22 : 20; uint32_t throughput = opt_work_size ? opt_work_size : (1 << intensity); + apiReportThroughput(thr_id, (uint32_t) throughput); throughput = min(throughput, max_nonce - first_nonce); int rc = 0; diff --git a/Algo256/keccak256.cu b/Algo256/keccak256.cu index 2afeda36c..c64fce63d 100644 --- a/Algo256/keccak256.cu +++ b/Algo256/keccak256.cu @@ -43,6 +43,7 @@ extern "C" int scanhash_keccak256(int thr_id, uint32_t *pdata, { const uint32_t first_nonce = pdata[19]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 21); // 256*256*8*4 + apiReportThroughput(thr_id, throughput); throughput = min(throughput, (max_nonce - first_nonce)); if (opt_benchmark) diff --git a/JHA/jackpotcoin.cu b/JHA/jackpotcoin.cu index 4d54ccbc9..4674e5da6 100644 --- a/JHA/jackpotcoin.cu +++ b/JHA/jackpotcoin.cu @@ -95,7 +95,8 @@ extern "C" int scanhash_jackpot(int thr_id, uint32_t *pdata, ((uint32_t*)ptarget)[7] = 0x000f; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 20); // 256*4096 - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (!init[thr_id]) { diff --git a/api.cpp b/api.cpp index 4525e5566..c9ab97c12 100644 --- a/api.cpp +++ b/api.cpp @@ -126,17 +126,6 @@ static void gpustatus(int thr_id) #endif cuda_gpu_clocks(cgpu); - // todo: can be 0 if set by algo (auto) - if (opt_intensity == 0 && opt_work_size) { - int i = 0; - uint32_t ws = opt_work_size; - while (ws > 1 && i++ < 32) - ws = ws >> 1; - cgpu->intensity = i; - } else { - cgpu->intensity = opt_intensity; - } - // todo: per gpu cgpu->accepted = accepted_count; cgpu->rejected = rejected_count; @@ -146,10 +135,10 @@ static void gpustatus(int thr_id) card = device_name[gpuid]; snprintf(buf, sizeof(buf), "GPU=%d;BUS=%hd;CARD=%s;" - "TEMP=%.1f;FAN=%hu;RPM=%hu;FREQ=%d;KHS=%.2f;HWF=%d;I=%d|THR=%u", + "TEMP=%.1f;FAN=%hu;RPM=%hu;FREQ=%d;KHS=%.2f;HWF=%d;I=%.2f;THR=%u|", gpuid, cgpu->gpu_bus, card, cgpu->gpu_temp, cgpu->gpu_fan, cgpu->gpu_fan_rpm, cgpu->gpu_clock, cgpu->khashes, - cgpu->hw_errors, cgpu->intensity, opt_work_size); + cgpu->hw_errors, cgpu->intensity, cgpu->throughput); // append to buffer for multi gpus strcat(buffer, buf); @@ -885,3 +874,23 @@ void *api_thread(void *userdata) return NULL; } + +/* to be able to report the default value set in each algo */ +void apiReportThroughput(int thr_id, uint32_t throughput) +{ + struct cgpu_info *cgpu = &thr_info[thr_id].gpu; + if (cgpu) { + cgpu->throughput = throughput; + if (opt_intensity == 0) { + uint8_t i = 0; + uint32_t ws = throughput; + while (ws > 1 && i++ < 32) + ws = ws >> 1; + cgpu->intensity_int = i; + } else { + cgpu->intensity_int = (uint8_t) opt_intensity; + } + // dec. part to finish... + cgpu->intensity = (float) cgpu->intensity_int; + } +} \ No newline at end of file diff --git a/api/index.php b/api/index.php index 17d435177..9afe9d6f7 100644 --- a/api/index.php +++ b/api/index.php @@ -49,6 +49,7 @@ function translateField($key) $intl['DIFF'] = 'Difficulty'; $intl['UPTIME'] = 'Miner up time'; $intl['TS'] = 'Last update'; + $intl['THR'] = 'Throughput'; $intl['H'] = 'Bloc height'; $intl['I'] = 'Intensity'; diff --git a/cuda_nist5.cu b/cuda_nist5.cu index d709d53e2..775d401dc 100644 --- a/cuda_nist5.cu +++ b/cuda_nist5.cu @@ -74,6 +74,7 @@ extern "C" int scanhash_nist5(int thr_id, uint32_t *pdata, ((uint32_t*)ptarget)[7] = 0x00FF; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 20); // 256*4096 + apiReportThroughput(thr_id, (uint32_t) throughput); throughput = min(throughput, (int) (max_nonce - first_nonce)); if (!init[thr_id]) diff --git a/fuguecoin.cpp b/fuguecoin.cpp index f7d95056b..46ac06044 100644 --- a/fuguecoin.cpp +++ b/fuguecoin.cpp @@ -27,8 +27,9 @@ extern "C" int scanhash_fugue256(int thr_id, uint32_t *pdata, const uint32_t *pt { uint32_t start_nonce = pdata[19]++; int intensity = (device_sm[device_map[thr_id]] > 500) ? 22 : 19; - uint32_t throughPut = opt_work_size ? opt_work_size : (1 << intensity); - throughPut = min(throughPut, max_nonce - start_nonce); + uint32_t throughput = opt_work_size ? opt_work_size : (1 << intensity); + apiReportThroughput(thr_id, throughput); + throughput = min(throughput, max_nonce - start_nonce); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0xf; @@ -36,7 +37,7 @@ extern "C" int scanhash_fugue256(int thr_id, uint32_t *pdata, const uint32_t *pt // init if(!init[thr_id]) { - fugue256_cpu_init(thr_id, throughPut); + fugue256_cpu_init(thr_id, throughput); init[thr_id] = true; } @@ -51,7 +52,7 @@ extern "C" int scanhash_fugue256(int thr_id, uint32_t *pdata, const uint32_t *pt do { // GPU uint32_t foundNounce = 0xFFFFFFFF; - fugue256_cpu_hash(thr_id, throughPut, pdata[19], NULL, &foundNounce); + fugue256_cpu_hash(thr_id, throughput, pdata[19], NULL, &foundNounce); if(foundNounce < 0xffffffff) { diff --git a/groestlcoin.cpp b/groestlcoin.cpp index ad32fac77..7efe6bdeb 100644 --- a/groestlcoin.cpp +++ b/groestlcoin.cpp @@ -64,10 +64,11 @@ extern "C" int scanhash_groestlcoin(int thr_id, uint32_t *pdata, const uint32_t uint32_t max_nonce, unsigned long *hashes_done) { uint32_t start_nonce = pdata[19]++; - uint32_t throughPut = opt_work_size ? opt_work_size : (1 << 19); // 256*2048 - throughPut = min(throughPut, max_nonce - start_nonce); + uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*2048 + apiReportThroughput(thr_id, throughput); + throughput = min(throughput, max_nonce - start_nonce); - uint32_t *outputHash = (uint32_t*)malloc(throughPut * 16 * sizeof(uint32_t)); + uint32_t *outputHash = (uint32_t*)malloc(throughput * 16 * sizeof(uint32_t)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x000000ff; @@ -75,7 +76,7 @@ extern "C" int scanhash_groestlcoin(int thr_id, uint32_t *pdata, const uint32_t // init if(!init[thr_id]) { - groestlcoin_cpu_init(thr_id, throughPut); + groestlcoin_cpu_init(thr_id, throughput); init[thr_id] = true; } @@ -92,7 +93,7 @@ extern "C" int scanhash_groestlcoin(int thr_id, uint32_t *pdata, const uint32_t uint32_t foundNounce = 0xFFFFFFFF; const uint32_t Htarg = ptarget[7]; - groestlcoin_cpu_hash(thr_id, throughPut, pdata[19], outputHash, &foundNounce); + groestlcoin_cpu_hash(thr_id, throughput, pdata[19], outputHash, &foundNounce); if(foundNounce < 0xffffffff) { diff --git a/heavy/heavy.cu b/heavy/heavy.cu index f355ecd04..b575a9939 100644 --- a/heavy/heavy.cu +++ b/heavy/heavy.cu @@ -137,7 +137,8 @@ int scanhash_heavy(int thr_id, uint32_t *pdata, const uint32_t first_nonce = pdata[19]; // CUDA will process thousands of threads. uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 128*4096 - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); int rc = 0; uint32_t *hash = NULL; diff --git a/lyra2/lyra2RE.cu b/lyra2/lyra2RE.cu index 057c45137..f53c29395 100644 --- a/lyra2/lyra2RE.cu +++ b/lyra2/lyra2RE.cu @@ -65,9 +65,10 @@ extern "C" int scanhash_lyra2(int thr_id, uint32_t *pdata, const uint32_t first_nonce = pdata[19]; int intensity = (device_sm[device_map[thr_id]] > 500) ? 256 * 256 * 25 : 256 * 256 * 14; if (device_sm[device_map[thr_id]] < 320) intensity = 256 * 256 * 6; - + int throughput = opt_work_size ? opt_work_size : (1 << intensity); // 18=256*256*4; uint32_t throughput = opt_work_size ? opt_work_size : intensity; throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x000f; diff --git a/miner.h b/miner.h index 26d30f411..1eb280470 100644 --- a/miner.h +++ b/miner.h @@ -378,6 +378,7 @@ extern int scanhash_x17(int thr_id, uint32_t *pdata, /* api related */ void *api_thread(void *userdata); +void apiReportThroughput(int thr_id, uint32_t throughput); struct cgpu_info { uint8_t gpu_id; @@ -386,7 +387,7 @@ struct cgpu_info { int rejected; int hw_errors; double khashes; - uint8_t intensity; + uint8_t intensity_int; uint8_t has_monitoring; float gpu_temp; uint16_t gpu_fan; @@ -407,6 +408,8 @@ struct cgpu_info { char gpu_sn[64]; char gpu_desc[64]; + float intensity; + uint32_t throughput; }; struct thr_api { diff --git a/myriadgroestl.cpp b/myriadgroestl.cpp index ed5b64c66..5b8c04a8f 100644 --- a/myriadgroestl.cpp +++ b/myriadgroestl.cpp @@ -44,8 +44,9 @@ extern "C" int scanhash_myriad(int thr_id, uint32_t *pdata, const uint32_t *ptar uint32_t start_nonce = pdata[19]++; - uint32_t throughPut = opt_work_size ? opt_work_size : (1 << 17); - throughPut = min(throughPut, max_nonce - start_nonce); + uint32_t throughput = opt_work_size ? opt_work_size : (1 << 17); + apiReportThroughput(thr_id, throughput); + throughput = min(throughput, max_nonce - start_nonce); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x0000ff; @@ -55,7 +56,7 @@ extern "C" int scanhash_myriad(int thr_id, uint32_t *pdata, const uint32_t *ptar { #if BIG_DEBUG #else - myriadgroestl_cpu_init(thr_id, throughPut); + myriadgroestl_cpu_init(thr_id, throughput); #endif cudaMallocHost(&(h_found[thr_id]), 4 * sizeof(uint32_t)); init[thr_id] = true; diff --git a/pentablake.cu b/pentablake.cu index 2ca094355..a46619dcb 100644 --- a/pentablake.cu +++ b/pentablake.cu @@ -462,7 +462,8 @@ extern "C" int scanhash_pentablake(int thr_id, uint32_t *pdata, const uint32_t * uint32_t endiandata[20]; int rc = 0; uint32_t throughput = opt_work_size ? opt_work_size : (128 * 2560); // 18.5 - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x000F; diff --git a/quark/animecoin.cu b/quark/animecoin.cu index 197b33e13..3e1adaa9c 100644 --- a/quark/animecoin.cu +++ b/quark/animecoin.cu @@ -165,7 +165,8 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata, { const uint32_t first_nonce = pdata[19]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*2048 - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x00000f; diff --git a/quark/quarkcoin.cu b/quark/quarkcoin.cu index 39ac02530..25da7fbf3 100644 --- a/quark/quarkcoin.cu +++ b/quark/quarkcoin.cu @@ -142,6 +142,7 @@ extern "C" int scanhash_quark(int thr_id, uint32_t *pdata, int intensity = 128 * 256 * 30; if (device_sm[device_map[thr_id]] == 520) intensity = 256 * 256 * 20; uint32_t throughput = opt_work_size ? opt_work_size : intensity; // 256*4096 + apiReportThroughput(thr_id, (uint32_t) throughput); throughput = min(throughput, max_nonce - first_nonce); if (opt_benchmark) diff --git a/qubit/deep.cu b/qubit/deep.cu index 0b67511cd..cdbc6f473 100644 --- a/qubit/deep.cu +++ b/qubit/deep.cu @@ -60,7 +60,8 @@ extern "C" int scanhash_deep(int thr_id, uint32_t *pdata, const uint32_t first_nonce = pdata[19]; uint32_t endiandata[20]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*256*8 - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x0000f; diff --git a/qubit/doom.cu b/qubit/doom.cu index 23b62c878..51a45e314 100644 --- a/qubit/doom.cu +++ b/qubit/doom.cu @@ -41,6 +41,7 @@ extern "C" int scanhash_doom(int thr_id, uint32_t *pdata, const uint32_t first_nonce = pdata[19]; uint32_t endiandata[20]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 22); // 256*256*8*8 + apiReportThroughput(thr_id, (uint32_t) throughput); throughput = min(throughput, (max_nonce - first_nonce)); if (opt_benchmark) diff --git a/qubit/qubit.cu b/qubit/qubit.cu index 24b4c8869..ebeafba35 100644 --- a/qubit/qubit.cu +++ b/qubit/qubit.cu @@ -79,7 +79,8 @@ extern "C" int scanhash_qubit(int thr_id, uint32_t *pdata, uint32_t endiandata[20]; const uint32_t first_nonce = pdata[19]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*256*8 - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x0000ff; diff --git a/x11/fresh.cu b/x11/fresh.cu index 4bcdb4b1f..a8d6e3b80 100644 --- a/x11/fresh.cu +++ b/x11/fresh.cu @@ -77,6 +77,7 @@ extern "C" int scanhash_fresh(int thr_id, uint32_t *pdata, uint32_t endiandata[20]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*256*8; + apiReportThroughput(thr_id, (uint32_t) throughput); throughput = min(throughput, (int) (max_nonce - first_nonce)); if (opt_benchmark) diff --git a/x11/s3.cu b/x11/s3.cu index 578ee083f..e8270697d 100644 --- a/x11/s3.cu +++ b/x11/s3.cu @@ -62,7 +62,8 @@ extern "C" int scanhash_s3(int thr_id, uint32_t *pdata, intensity--; #endif uint32_t throughput = opt_work_size ? opt_work_size : (1 << intensity); - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0xF; diff --git a/x11/x11.cu b/x11/x11.cu index 75f561860..5ae52c586 100644 --- a/x11/x11.cu +++ b/x11/x11.cu @@ -152,6 +152,7 @@ extern "C" int scanhash_x11(int thr_id, uint32_t *pdata, uint32_t throughput = opt_work_size ? opt_work_size : intensity; // 20=256*256*16; throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); if (opt_benchmark) diff --git a/x13/x13.cu b/x13/x13.cu index d6904da33..f7de82adc 100644 --- a/x13/x13.cu +++ b/x13/x13.cu @@ -158,6 +158,8 @@ extern "C" int scanhash_x13(int thr_id, uint32_t *pdata, uint32_t endiandata[20]; int intensity = (device_sm[device_map[thr_id]] > 500) ? 256 * 256 * 20 : 256 * 256 * 10; uint32_t throughput = opt_work_size ? opt_work_size : intensity; // 20=256*256*16; + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0xf; diff --git a/x15/whirlpool.cu b/x15/whirlpool.cu index bc176caca..830c01608 100644 --- a/x15/whirlpool.cu +++ b/x15/whirlpool.cu @@ -58,7 +58,8 @@ extern "C" int scanhash_whc(int thr_id, uint32_t *pdata, const uint32_t first_nonce = pdata[19]; uint32_t endiandata[20]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*256*8; - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x0000ff; diff --git a/x15/x14.cu b/x15/x14.cu index 48f1b3f12..979289988 100644 --- a/x15/x14.cu +++ b/x15/x14.cu @@ -158,9 +158,8 @@ extern "C" int scanhash_x14(int thr_id, uint32_t *pdata, int intensity = 256 * 256 * 9; if (device_sm[device_map[thr_id]] == 520) intensity = 256 * 256 * 15; uint32_t throughput = opt_work_size ? opt_work_size : intensity; // 256*256*8; - - - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, max_nonce - first_nonce); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x000f; diff --git a/x15/x15.cu b/x15/x15.cu index 778ebb9ea..946d4eca0 100644 --- a/x15/x15.cu +++ b/x15/x15.cu @@ -171,6 +171,8 @@ extern "C" int scanhash_x15(int thr_id, uint32_t *pdata, int intensity = 256 * 256 * 9; if (device_sm[device_map[thr_id]] == 520) intensity = 256 * 256 * 15; uint32_t throughput = opt_work_size ? opt_work_size : intensity; // 256*256*8; + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x00F; diff --git a/x17/x17.cu b/x17/x17.cu index 98376579f..620975a22 100644 --- a/x17/x17.cu +++ b/x17/x17.cu @@ -186,7 +186,8 @@ extern "C" int scanhash_x17(int thr_id, uint32_t *pdata, { const uint32_t first_nonce = pdata[19]; uint32_t throughput = opt_work_size ? opt_work_size : (1 << 19); // 256*256*8; - throughput = min(throughput, max_nonce - first_nonce); + apiReportThroughput(thr_id, (uint32_t) throughput); + throughput = min(throughput, (int)(max_nonce - first_nonce)); if (opt_benchmark) ((uint32_t*)ptarget)[7] = 0x00ff;