mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 23:08:07 +00:00
Make postcalc_hash asynchronous as well.
This commit is contained in:
parent
378d18f8eb
commit
a45c54aaf8
16
cpu-miner.c
16
cpu-miner.c
@ -277,20 +277,6 @@ static struct option options[] = {
|
|||||||
{ "userpass", 1, NULL, 1002 },
|
{ "userpass", 1, NULL, 1002 },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct work {
|
|
||||||
unsigned char data[128];
|
|
||||||
unsigned char hash1[64];
|
|
||||||
unsigned char midstate[32];
|
|
||||||
unsigned char target[32];
|
|
||||||
|
|
||||||
unsigned char hash[32];
|
|
||||||
|
|
||||||
uint32_t output[1];
|
|
||||||
uint32_t res_nonce;
|
|
||||||
uint32_t valid;
|
|
||||||
dev_blk_ctx blk;
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool jobj_binary(const json_t *obj, const char *key,
|
static bool jobj_binary(const json_t *obj, const char *key,
|
||||||
void *buf, size_t buflen)
|
void *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
@ -964,7 +950,7 @@ static void *gpuminer_thread(void *userdata)
|
|||||||
for (i = 0; i < 127; i++) {
|
for (i = 0; i < 127; i++) {
|
||||||
if (res[i]) {
|
if (res[i]) {
|
||||||
applog(LOG_INFO, "GPU %d found something?", gpu_from_thr_id(thr_id));
|
applog(LOG_INFO, "GPU %d found something?", gpu_from_thr_id(thr_id));
|
||||||
postcalc_hash(mythr, &work->blk, work, res[i]);
|
postcalc_hash_async(mythr, work, res[i]);
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
38
findnonce.c
38
findnonce.c
@ -9,9 +9,12 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "ocl.h"
|
#include "ocl.h"
|
||||||
#include "findnonce.h"
|
#include "findnonce.h"
|
||||||
|
#include "miner.h"
|
||||||
|
|
||||||
const uint32_t SHA256_K[64] = {
|
const uint32_t SHA256_K[64] = {
|
||||||
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
||||||
@ -131,8 +134,21 @@ void precalc_hash(dev_blk_ctx *blk, uint32_t *state, uint32_t *data) {
|
|||||||
R(E, F, G, H, A, B, C, D, P(u+4), SHA256_K[u+4]); \
|
R(E, F, G, H, A, B, C, D, P(u+4), SHA256_K[u+4]); \
|
||||||
R(D, E, F, G, H, A, B, C, P(u+5), SHA256_K[u+5])
|
R(D, E, F, G, H, A, B, C, P(u+5), SHA256_K[u+5])
|
||||||
|
|
||||||
void postcalc_hash(struct thr_info *thr, dev_blk_ctx *blk, struct work *work, uint32_t start)
|
struct pc_data {
|
||||||
|
struct thr_info *thr;
|
||||||
|
struct work work;
|
||||||
|
uint32_t start;
|
||||||
|
pthread_t pth;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void *postcalc_hash(void *userdata)
|
||||||
{
|
{
|
||||||
|
struct pc_data *pcd = (struct pc_data *)userdata;
|
||||||
|
struct thr_info *thr = pcd->thr;
|
||||||
|
dev_blk_ctx *blk = &pcd->work.blk;
|
||||||
|
struct work *work = &pcd->work;
|
||||||
|
uint32_t start = pcd->start;
|
||||||
|
|
||||||
cl_uint A, B, C, D, E, F, G, H;
|
cl_uint A, B, C, D, E, F, G, H;
|
||||||
cl_uint W[16];
|
cl_uint W[16];
|
||||||
cl_uint nonce;
|
cl_uint nonce;
|
||||||
@ -185,4 +201,24 @@ void postcalc_hash(struct thr_info *thr, dev_blk_ctx *blk, struct work *work, ui
|
|||||||
out:
|
out:
|
||||||
if (unlikely(best_g == ~0))
|
if (unlikely(best_g == ~0))
|
||||||
applog(LOG_ERR, "No best_g found! Error in OpenCL code?");
|
applog(LOG_ERR, "No best_g found! Error in OpenCL code?");
|
||||||
|
free(pcd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void postcalc_hash_async(struct thr_info *thr, struct work *work, uint32_t start)
|
||||||
|
{
|
||||||
|
struct pc_data *pcd = malloc(sizeof(struct pc_data));
|
||||||
|
if (unlikely(!pcd)) {
|
||||||
|
applog(LOG_ERR, "Failed to malloc pc_data in postcalc_hash_async");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pcd->thr = thr;
|
||||||
|
memcpy(&pcd->work, work, sizeof(struct work));
|
||||||
|
pcd->start = start;
|
||||||
|
|
||||||
|
if (pthread_create(&pcd->pth, NULL, postcalc_hash, (void *)pcd)) {
|
||||||
|
applog(LOG_ERR, "Failed to create postcalc_hash thread");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pthread_detach(pcd->pth);
|
||||||
}
|
}
|
||||||
|
20
findnonce.h
20
findnonce.h
@ -1,22 +1,10 @@
|
|||||||
#ifdef __APPLE_CC__
|
#ifndef __FINDNONCE_H__
|
||||||
#include <OpenCL/opencl.h>
|
#define __FINDNONCE_H__
|
||||||
#else
|
|
||||||
#include <CL/cl.h>
|
|
||||||
#endif
|
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
|
|
||||||
#define MAXTHREADS (0xFFFFFFFF)
|
#define MAXTHREADS (0xFFFFFFFF)
|
||||||
#define BUFFERSIZE (sizeof(uint32_t) * 128)
|
#define BUFFERSIZE (sizeof(uint32_t) * 128)
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
cl_uint ctx_a; cl_uint ctx_b; cl_uint ctx_c; cl_uint ctx_d;
|
|
||||||
cl_uint ctx_e; cl_uint ctx_f; cl_uint ctx_g; cl_uint ctx_h;
|
|
||||||
cl_uint cty_a; cl_uint cty_b; cl_uint cty_c; cl_uint cty_d;
|
|
||||||
cl_uint cty_e; cl_uint cty_f; cl_uint cty_g; cl_uint cty_h;
|
|
||||||
cl_uint merkle; cl_uint ntime; cl_uint nbits; cl_uint nonce;
|
|
||||||
cl_uint fW0; cl_uint fW1; cl_uint fW2; cl_uint fW3; cl_uint fW15;
|
|
||||||
cl_uint fW01r; cl_uint fcty_e; cl_uint fcty_e2;
|
|
||||||
} dev_blk_ctx;
|
|
||||||
|
|
||||||
extern void precalc_hash(dev_blk_ctx *blk, uint32_t *state, uint32_t *data);
|
extern void precalc_hash(dev_blk_ctx *blk, uint32_t *state, uint32_t *data);
|
||||||
extern void postcalc_hash(struct thr_info *thr, dev_blk_ctx *blk, struct work *work, uint32_t start);
|
extern void postcalc_hash_async(struct thr_info *thr, struct work *work, uint32_t start);
|
||||||
|
#endif /*__FINDNONCE_H__*/
|
||||||
|
31
miner.h
31
miner.h
@ -9,6 +9,11 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
#ifdef __APPLE_CC__
|
||||||
|
#include <OpenCL/opencl.h>
|
||||||
|
#else
|
||||||
|
#include <CL/cl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef STDC_HEADERS
|
#ifdef STDC_HEADERS
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
@ -194,7 +199,31 @@ extern bool use_syslog;
|
|||||||
extern struct thr_info *thr_info;
|
extern struct thr_info *thr_info;
|
||||||
extern int longpoll_thr_id;
|
extern int longpoll_thr_id;
|
||||||
extern struct work_restart *work_restart;
|
extern struct work_restart *work_restart;
|
||||||
struct work;
|
|
||||||
|
typedef struct {
|
||||||
|
cl_uint ctx_a; cl_uint ctx_b; cl_uint ctx_c; cl_uint ctx_d;
|
||||||
|
cl_uint ctx_e; cl_uint ctx_f; cl_uint ctx_g; cl_uint ctx_h;
|
||||||
|
cl_uint cty_a; cl_uint cty_b; cl_uint cty_c; cl_uint cty_d;
|
||||||
|
cl_uint cty_e; cl_uint cty_f; cl_uint cty_g; cl_uint cty_h;
|
||||||
|
cl_uint merkle; cl_uint ntime; cl_uint nbits; cl_uint nonce;
|
||||||
|
cl_uint fW0; cl_uint fW1; cl_uint fW2; cl_uint fW3; cl_uint fW15;
|
||||||
|
cl_uint fW01r; cl_uint fcty_e; cl_uint fcty_e2;
|
||||||
|
} dev_blk_ctx;
|
||||||
|
|
||||||
|
struct work {
|
||||||
|
unsigned char data[128];
|
||||||
|
unsigned char hash1[64];
|
||||||
|
unsigned char midstate[32];
|
||||||
|
unsigned char target[32];
|
||||||
|
|
||||||
|
unsigned char hash[32];
|
||||||
|
|
||||||
|
uint32_t output[1];
|
||||||
|
uint32_t res_nonce;
|
||||||
|
uint32_t valid;
|
||||||
|
dev_blk_ctx blk;
|
||||||
|
};
|
||||||
|
|
||||||
bool submit_nonce(struct thr_info *thr, struct work *work, uint32_t nonce);
|
bool submit_nonce(struct thr_info *thr, struct work *work, uint32_t nonce);
|
||||||
|
|
||||||
extern void applog(int prio, const char *fmt, ...);
|
extern void applog(int prio, const char *fmt, ...);
|
||||||
|
Loading…
Reference in New Issue
Block a user