Browse Source

Use cpu scrypt code to check if an scrypt share is below target before submitting it.

nfactor-troky
Con Kolivas 13 years ago
parent
commit
808f403a14
  1. 8
      Makefile.am
  2. 2
      cgminer.c
  3. 10
      findnonce.c
  4. 16
      scrypt.c

8
Makefile.am

@ -45,6 +45,10 @@ cgminer_SOURCES += ocl.c ocl.h findnonce.c findnonce.h @@ -45,6 +45,10 @@ cgminer_SOURCES += ocl.c ocl.h findnonce.c findnonce.h
cgminer_SOURCES += adl.c adl.h adl_functions.h
cgminer_SOURCES += *.cl
if HAS_SCRYPT
cgminer_SOURCES += scrypt.c
endif
if HAS_CPUMINE
# original CPU related sources, unchanged
cgminer_SOURCES += \
@ -56,10 +60,6 @@ cgminer_SOURCES += \ @@ -56,10 +60,6 @@ cgminer_SOURCES += \
# the CPU portion extracted from original main.c
cgminer_SOURCES += driver-cpu.h driver-cpu.c
if HAS_SCRYPT
cgminer_SOURCES += scrypt.c
endif
if HAS_YASM
AM_CFLAGS = -DHAS_YASM
if HAVE_x86_64

2
cgminer.c

@ -4012,7 +4012,7 @@ bool submit_nonce(struct thr_info *thr, struct work *work, uint32_t nonce) @@ -4012,7 +4012,7 @@ bool submit_nonce(struct thr_info *thr, struct work *work, uint32_t nonce)
/* Do one last check before attempting to submit the work */
/* Side effect: sets work->data for us */
if (!test_nonce(work, nonce)) {
applog(LOG_INFO, "Share below target");
applog(LOG_INFO, "Pool %d share below target", work->pool->pool_no);
return true;
}
return submit_work_sync(thr, work);

10
findnonce.c

@ -220,6 +220,8 @@ static void send_nonce(struct pc_data *pcd, cl_uint nonce) @@ -220,6 +220,8 @@ static void send_nonce(struct pc_data *pcd, cl_uint nonce)
}
}
extern bool scrypt_scan_nonce(unsigned char *pdata, uint32_t nonce);
static void *postcalc_hash(void *userdata)
{
struct pc_data *pcd = (struct pc_data *)userdata;
@ -234,9 +236,13 @@ static void *postcalc_hash(void *userdata) @@ -234,9 +236,13 @@ static void *postcalc_hash(void *userdata)
if (nonce) {
applog(LOG_DEBUG, "OCL NONCE %u", nonce);
#ifdef USE_SCRYPT
if (opt_scrypt)
submit_nonce(thr, pcd->work, nonce);
if (opt_scrypt) {
struct work *work = pcd->work;
if (scrypt_scan_nonce(work, nonce))
submit_nonce(thr, work, nonce);
else
applog(LOG_INFO, "Pool %d share below target", work->pool->pool_no);
} else
#endif
send_nonce(pcd, nonce);
nonces++;

16
scrypt.c

@ -407,6 +407,20 @@ static uint32_t scrypt_1024_1_1_256_sp(const uint32_t* input, char* scratchpad) @@ -407,6 +407,20 @@ static uint32_t scrypt_1024_1_1_256_sp(const uint32_t* input, char* scratchpad)
return PBKDF2_SHA256_80_128_32(input, X);
}
bool scrypt_scan_nonce(struct work *work, uint32_t nonce)
{
uint32_t Htarg, tmp_hash7, data[20];
unsigned char *scratchbuf;
be32enc_vect(data, (const uint32_t *)work->data, 19);
data[19] = htobe32(nonce);
Htarg = ((const uint32_t *)work->target)[7];
scratchbuf = alloca(131584);
tmp_hash7 = scrypt_1024_1_1_256_sp(data, scratchbuf);
return (tmp_hash7 <= Htarg);
}
bool scanhash_scrypt(struct thr_info *thr, const unsigned char *pmidstate, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget,
@ -423,7 +437,7 @@ bool scanhash_scrypt(struct thr_info *thr, const unsigned char *pmidstate, unsig @@ -423,7 +437,7 @@ bool scanhash_scrypt(struct thr_info *thr, const unsigned char *pmidstate, unsig
be32enc_vect(data, (const uint32_t *)pdata, 19);
scratchbuf = malloc(131583);
scratchbuf = malloc(131584);
if (unlikely(!scratchbuf)) {
applog(LOG_ERR, "Failed to malloc scratchbuf in scanhash_scrypt");
return ret;

Loading…
Cancel
Save