whirlpoolx: try to fix linux hashrates
bug reported by PVMining with a lot of cards (not seen here)
This commit is contained in:
parent
f8f46bfe5b
commit
10d4f4a96a
13
ccminer.cpp
13
ccminer.cpp
@ -1253,6 +1253,7 @@ static void *miner_thread(void *userdata)
|
|||||||
switch (opt_algo) {
|
switch (opt_algo) {
|
||||||
case ALGO_BLAKECOIN:
|
case ALGO_BLAKECOIN:
|
||||||
case ALGO_BLAKE:
|
case ALGO_BLAKE:
|
||||||
|
case ALGO_WHIRLPOOLX:
|
||||||
minmax = 0x80000000U;
|
minmax = 0x80000000U;
|
||||||
break;
|
break;
|
||||||
case ALGO_KECCAK:
|
case ALGO_KECCAK:
|
||||||
@ -2235,14 +2236,10 @@ int main(int argc, char *argv[])
|
|||||||
#else
|
#else
|
||||||
printf(" Built with the nVidia CUDA SDK 6.5\n\n");
|
printf(" Built with the nVidia CUDA SDK 6.5\n\n");
|
||||||
#endif
|
#endif
|
||||||
printf(" Originally based on pooler cpuminer,\n");
|
printf(" Originally based on cudaminer by Christian Buchner and Christian H.,\n");
|
||||||
printf(" CUDA support by Christian Buchner and Christian H.\n");
|
|
||||||
printf(" Include some of djm34 additions and sp optimisations\n");
|
printf(" Include some of djm34 additions and sp optimisations\n");
|
||||||
printf("BTC donation address: 1AJdfCpLWPNoAMDfHF1wD5y8VgKSSTHxPo\n\n");
|
printf("BTC donation address: 1AJdfCpLWPNoAMDfHF1wD5y8VgKSSTHxPo\n\n");
|
||||||
|
|
||||||
printf(" Whirlpoolx support by Provos Alexis.\n");
|
|
||||||
printf("VNL donation address: VrjvyQJ9d1Bfte5kVSA8qfZoYdN2C6weCG\n\n");
|
|
||||||
|
|
||||||
rpc_user = strdup("");
|
rpc_user = strdup("");
|
||||||
rpc_pass = strdup("");
|
rpc_pass = strdup("");
|
||||||
rpc_url = strdup("");
|
rpc_url = strdup("");
|
||||||
@ -2290,6 +2287,12 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extra credits..
|
||||||
|
if (opt_algo == ALGO_WHIRLPOOLX) {
|
||||||
|
printf(" Whirlpoolx support by Alexis Provos.\n");
|
||||||
|
printf("VNL donation address: VrjvyQJ9d1Bfte5kVSA8qfZoYdN2C6weCG\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (!opt_benchmark && !strlen(rpc_url)) {
|
if (!opt_benchmark && !strlen(rpc_url)) {
|
||||||
fprintf(stderr, "%s: no URL supplied\n", argv[0]);
|
fprintf(stderr, "%s: no URL supplied\n", argv[0]);
|
||||||
show_usage_and_exit(1);
|
show_usage_and_exit(1);
|
||||||
|
@ -39,11 +39,11 @@ extern "C" void whirlxHash(void *state, const void *input)
|
|||||||
|
|
||||||
static bool init[MAX_GPUS] = { 0 };
|
static bool init[MAX_GPUS] = { 0 };
|
||||||
|
|
||||||
|
|
||||||
extern "C" int scanhash_whirlpoolx(int thr_id, uint32_t *pdata, const uint32_t *ptarget,
|
extern "C" int scanhash_whirlpoolx(int thr_id, uint32_t *pdata, const uint32_t *ptarget,
|
||||||
uint32_t max_nonce, unsigned long *hashes_done)
|
uint32_t max_nonce, unsigned long *hashes_done)
|
||||||
{
|
{
|
||||||
const uint32_t first_nonce = pdata[19];
|
const uint32_t first_nonce = pdata[19];
|
||||||
uint64_t n = first_nonce;
|
|
||||||
uint32_t endiandata[20];
|
uint32_t endiandata[20];
|
||||||
uint32_t throughput = device_intensity(thr_id, __func__, 1U << 22);
|
uint32_t throughput = device_intensity(thr_id, __func__, 1U << 22);
|
||||||
throughput = min(throughput, max_nonce - first_nonce);
|
throughput = min(throughput, max_nonce - first_nonce);
|
||||||
@ -67,12 +67,7 @@ extern "C" int scanhash_whirlpoolx(int thr_id, uint32_t *pdata, const uint32_t *
|
|||||||
whirlpoolx_setBlock_80((void*)endiandata, ptarget);
|
whirlpoolx_setBlock_80((void*)endiandata, ptarget);
|
||||||
whirlpoolx_precompute();
|
whirlpoolx_precompute();
|
||||||
do {
|
do {
|
||||||
uint32_t foundNonce = UINT32_MAX;
|
uint32_t foundNonce = whirlpoolx_cpu_hash(thr_id, throughput, pdata[19]);
|
||||||
if((n+throughput) >= max_nonce) {
|
|
||||||
// Preventing glitch
|
|
||||||
throughput = (uint32_t) (max_nonce-n);
|
|
||||||
}
|
|
||||||
foundNonce = whirlpoolx_cpu_hash(thr_id, throughput, (uint32_t) n);
|
|
||||||
if (foundNonce != UINT32_MAX)
|
if (foundNonce != UINT32_MAX)
|
||||||
{
|
{
|
||||||
const uint32_t Htarg = ptarget[7];
|
const uint32_t Htarg = ptarget[7];
|
||||||
@ -81,10 +76,9 @@ extern "C" int scanhash_whirlpoolx(int thr_id, uint32_t *pdata, const uint32_t *
|
|||||||
whirlxHash(vhash64, endiandata);
|
whirlxHash(vhash64, endiandata);
|
||||||
|
|
||||||
if (vhash64[7] <= Htarg && fulltest(vhash64, ptarget)) {
|
if (vhash64[7] <= Htarg && fulltest(vhash64, ptarget)) {
|
||||||
int res = 1;
|
*hashes_done = pdata[19] - first_nonce + throughput;
|
||||||
*hashes_done = (unsigned long)(n - first_nonce + throughput);
|
|
||||||
pdata[19] = foundNonce;
|
pdata[19] = foundNonce;
|
||||||
return res;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (vhash64[7] > Htarg) {
|
else if (vhash64[7] > Htarg) {
|
||||||
applog(LOG_INFO, "GPU #%d: result for %08x is not in range: %x > %x", thr_id, foundNonce, vhash64[7], Htarg);
|
applog(LOG_INFO, "GPU #%d: result for %08x is not in range: %x > %x", thr_id, foundNonce, vhash64[7], Htarg);
|
||||||
@ -93,9 +87,16 @@ extern "C" int scanhash_whirlpoolx(int thr_id, uint32_t *pdata, const uint32_t *
|
|||||||
applog(LOG_INFO, "GPU #%d: result for %08x does not validate on CPU!", thr_id, foundNonce);
|
applog(LOG_INFO, "GPU #%d: result for %08x does not validate on CPU!", thr_id, foundNonce);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n += throughput;
|
|
||||||
|
|
||||||
} while (n < max_nonce && !work_restart[thr_id].restart);
|
pdata[19] += throughput;
|
||||||
*hashes_done = (unsigned long)(n - first_nonce);
|
|
||||||
|
if (((uint64_t)pdata[19]+throughput) >= max_nonce) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (!work_restart[thr_id].restart);
|
||||||
|
|
||||||
|
*(hashes_done) = pdata[19] - first_nonce + 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user