Browse Source

enhance solo mining, update http headers

and prepare next version...
2upstream
Tanguy Pruvot 10 years ago
parent
commit
799b230af2
  1. 20
      ccminer.vcxproj.filters
  2. 2
      configure.ac
  3. 22
      cpu-miner.c
  4. 6
      cpuminer-config.h
  5. 3
      miner.h
  6. 27
      quark/animecoin.cu
  7. 25
      util.c

20
ccminer.vcxproj.filters

@ -31,9 +31,6 @@
<Filter Include="Source Files\code"> <Filter Include="Source Files\code">
<UniqueIdentifier>{fe39ded0-754b-415f-a284-038a15a0aa55}</UniqueIdentifier> <UniqueIdentifier>{fe39ded0-754b-415f-a284-038a15a0aa55}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source Files\CUDA\jansson">
<UniqueIdentifier>{17b56151-79ec-4a32-bac3-9d94ae7f68fe}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\CUDA\JHA"> <Filter Include="Source Files\CUDA\JHA">
<UniqueIdentifier>{d8f2e173-a0a5-455b-8efc-42511b585156}</UniqueIdentifier> <UniqueIdentifier>{d8f2e173-a0a5-455b-8efc-42511b585156}</UniqueIdentifier>
</Filter> </Filter>
@ -67,25 +64,28 @@
<Filter Include="Source Files\CUDA\x17"> <Filter Include="Source Files\CUDA\x17">
<UniqueIdentifier>{85dfae6a-66ca-4332-8cec-98ee70cbdf2f}</UniqueIdentifier> <UniqueIdentifier>{85dfae6a-66ca-4332-8cec-98ee70cbdf2f}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source Files\jansson">
<UniqueIdentifier>{17b56151-79ec-4a32-bac3-9d94ae7f68fe}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="compat\jansson\dump.c"> <ClCompile Include="compat\jansson\dump.c">
<Filter>Source Files\CUDA\jansson</Filter> <Filter>Source Files\jansson</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="compat\jansson\hashtable.c"> <ClCompile Include="compat\jansson\hashtable.c">
<Filter>Source Files\CUDA\jansson</Filter> <Filter>Source Files\jansson</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="compat\jansson\load.c"> <ClCompile Include="compat\jansson\load.c">
<Filter>Source Files\CUDA\jansson</Filter> <Filter>Source Files\jansson</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="compat\jansson\strbuffer.c"> <ClCompile Include="compat\jansson\strbuffer.c">
<Filter>Source Files\CUDA\jansson</Filter> <Filter>Source Files\jansson</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="compat\jansson\utf.c"> <ClCompile Include="compat\jansson\utf.c">
<Filter>Source Files\CUDA\jansson</Filter> <Filter>Source Files\jansson</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="compat\jansson\value.c"> <ClCompile Include="compat\jansson\value.c">
<Filter>Source Files\CUDA\jansson</Filter> <Filter>Source Files\jansson</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="compat\getopt\getopt_long.c"> <ClCompile Include="compat\getopt\getopt_long.c">
<Filter>Source Files\getopt</Filter> <Filter>Source Files\getopt</Filter>
@ -464,4 +464,4 @@
<Filter>Source Files\CUDA</Filter> <Filter>Source Files\CUDA</Filter>
</CudaCompile> </CudaCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

2
configure.ac

@ -1,4 +1,4 @@
AC_INIT([ccminer], [2014.09.11]) AC_INIT([ccminer], [2014.09.28])
AC_PREREQ([2.59c]) AC_PREREQ([2.59c])
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM

22
cpu-miner.c

@ -362,6 +362,10 @@ struct work {
uint32_t scanned_from; uint32_t scanned_from;
uint32_t scanned_to; uint32_t scanned_to;
/* deprecated, but maybe useful
for some 256-bit algos */
uint32_t midstate[8];
}; };
static struct work g_work; static struct work g_work;
@ -421,6 +425,13 @@ static bool work_decode(const json_t *val, struct work *work)
for (i = 0; i < ARRAY_SIZE(work->target); i++) for (i = 0; i < ARRAY_SIZE(work->target); i++)
work->target[i] = le32dec(work->target + i); work->target[i] = le32dec(work->target + i);
if (opt_algo == ALGO_ANIME || opt_algo == ALGO_BLAKE /* || opt_algo == ALGO_SHA256D || opt_algo == ALGO_SCRYPT */) {
jobj_binary(val, "midstate", work->midstate, sizeof(work->midstate));
}
/* use work ntime as job id (solo-mining) */
cbin2hex(work->job_id, (const char*)&work->data[17], 4);
return true; return true;
err_out: err_out:
@ -594,8 +605,13 @@ static bool get_upstream_work(CURL *curl, struct work *work)
if (opt_debug && rc) { if (opt_debug && rc) {
timeval_subtract(&diff, &tv_end, &tv_start); timeval_subtract(&diff, &tv_end, &tv_start);
applog(LOG_DEBUG, "DEBUG: got new work in %u µs", /* anime : {"error":null,"result":{
diff.tv_sec * 1000000 + diff.tv_usec); "target": "0000000000000000000000000000000000000000000000000000331a07000000",
"midstate":"57049c1d01d724567a1eb1886c5142cb79e7048f2ef206bee32441a90f3ec49e",
"hash1":"00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
"data":"000000701bfd5bf1745a10bde7cab641e90b196146410b2b28d60d57b90f0b3d0000000454b7169957e174da9575c67bc4da6ba9d204ca04c8ff5ef05cb06c2cd38e92065427a8331d071a3300000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000"},
"id":0} */
applog(LOG_DEBUG, "got new work %s", work->job_id);
} }
json_decref(val); json_decref(val);
@ -1459,7 +1475,7 @@ out:
return NULL; return NULL;
} }
#define PROGRAM_VERSION "1.4.4" #define PROGRAM_VERSION "1.4.5"
static void show_version_and_exit(void) static void show_version_and_exit(void)
{ {
printf("%s v%s\n" printf("%s v%s\n"

6
cpuminer-config.h

@ -156,7 +156,7 @@
#define PACKAGE_NAME "ccminer" #define PACKAGE_NAME "ccminer"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "ccminer 2014.09.11" #define PACKAGE_STRING "ccminer 2014.09.28"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "ccminer" #define PACKAGE_TARNAME "ccminer"
@ -165,7 +165,7 @@
#define PACKAGE_URL "" #define PACKAGE_URL ""
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "2014.09.11" #define PACKAGE_VERSION "1.4"
/* If using the C implementation of alloca, define if you know the /* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be direction of stack growth for your system; otherwise it will be
@ -188,7 +188,7 @@
#define USE_XOP 1 #define USE_XOP 1
/* Version number of package */ /* Version number of package */
#define VERSION "2014.09.11" #define VERSION "2014.09.28"
/* Define curl_free() as free() if our version of curl lacks curl_free. */ /* Define curl_free() as free() if our version of curl lacks curl_free. */
/* #undef curl_free */ /* #undef curl_free */

3
miner.h

@ -352,7 +352,8 @@ extern uint16_t opt_vote;
extern void applog(int prio, const char *fmt, ...); extern void applog(int prio, const char *fmt, ...);
extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass, extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass,
const char *rpc_req, bool, bool, int *); const char *rpc_req, bool, bool, int *);
extern char *bin2hex(const unsigned char *p, size_t len); extern void cbin2hex(char *out, const char *in, size_t len);
extern char *bin2hex(const unsigned char *in, size_t len);
extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len); extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
extern int timeval_subtract(struct timeval *result, struct timeval *x, extern int timeval_subtract(struct timeval *result, struct timeval *x,
struct timeval *y); struct timeval *y);

27
quark/animecoin.cu

@ -140,7 +140,7 @@ extern "C" void animehash(void *state, const void *input)
memcpy(state, hash, 32); memcpy(state, hash, 32);
} }
/*
struct HashPredicate struct HashPredicate
{ {
HashPredicate(uint32_t *hashes, uint32_t startNonce) : HashPredicate(uint32_t *hashes, uint32_t startNonce) :
@ -158,7 +158,7 @@ struct HashPredicate
uint32_t *m_hashes; uint32_t *m_hashes;
uint32_t m_startNonce; uint32_t m_startNonce;
}; };
*/
extern "C" int scanhash_anime(int thr_id, uint32_t *pdata, extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
const uint32_t *ptarget, uint32_t max_nonce, const uint32_t *ptarget, uint32_t max_nonce,
@ -170,7 +170,6 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
((uint32_t*)ptarget)[7] = 0x00000f; ((uint32_t*)ptarget)[7] = 0x00000f;
const uint32_t Htarg = ptarget[7]; const uint32_t Htarg = ptarget[7];
const int throughput = 256*2048; // 100; const int throughput = 256*2048; // 100;
static bool init[8] = {0,0,0,0,0,0,0,0}; static bool init[8] = {0,0,0,0,0,0,0,0};
@ -178,8 +177,7 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
{ {
cudaSetDevice(device_map[thr_id]); cudaSetDevice(device_map[thr_id]);
// Konstanten kopieren, Speicher belegen CUDA_SAFE_CALL(cudaMalloc(&d_hash[thr_id], 16 * sizeof(uint32_t) * throughput));
cudaMalloc(&d_hash[thr_id], 16 * sizeof(uint32_t) * throughput);
quark_blake512_cpu_init(thr_id, throughput); quark_blake512_cpu_init(thr_id, throughput);
quark_groestl512_cpu_init(thr_id, throughput); quark_groestl512_cpu_init(thr_id, throughput);
@ -190,10 +188,10 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
cuda_check_cpu_init(thr_id, throughput); cuda_check_cpu_init(thr_id, throughput);
quark_compactTest_cpu_init(thr_id, throughput); quark_compactTest_cpu_init(thr_id, throughput);
cudaMalloc(&d_animeNonces[thr_id], sizeof(uint32_t)*throughput); CUDA_SAFE_CALL(cudaMalloc(&d_animeNonces[thr_id], sizeof(uint32_t)*throughput));
cudaMalloc(&d_branch1Nonces[thr_id], sizeof(uint32_t)*throughput); CUDA_SAFE_CALL(cudaMalloc(&d_branch1Nonces[thr_id], sizeof(uint32_t)*throughput));
cudaMalloc(&d_branch2Nonces[thr_id], sizeof(uint32_t)*throughput); CUDA_SAFE_CALL(cudaMalloc(&d_branch2Nonces[thr_id], sizeof(uint32_t)*throughput));
cudaMalloc(&d_branch3Nonces[thr_id], sizeof(uint32_t)*throughput); CUDA_SAFE_CALL(cudaMalloc(&d_branch3Nonces[thr_id], sizeof(uint32_t)*throughput));
init[thr_id] = true; init[thr_id] = true;
} }
@ -269,17 +267,22 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
if ((vhash64[7]<=Htarg) && fulltest(vhash64, ptarget)) { if ((vhash64[7]<=Htarg) && fulltest(vhash64, ptarget)) {
pdata[19] = foundNonce; pdata[19] = foundNonce;
*hashes_done = (foundNonce - first_nonce + 1)/2; *hashes_done = foundNonce - first_nonce + 1;
return 1; return 1;
} else { } else {
applog(LOG_INFO, "GPU #%d: result for nonce $%08X does not validate on CPU!", thr_id, foundNonce); applog(LOG_INFO, "GPU #%d: result for nonce $%08X does not validate on CPU!", thr_id, foundNonce);
} }
} }
if ((uint64_t)pdata[19] + throughput > (uint64_t)max_nonce) {
pdata[19] = max_nonce;
break;
}
pdata[19] += throughput; pdata[19] += throughput;
} while (pdata[19] < max_nonce && !work_restart[thr_id].restart); } while (!work_restart[thr_id].restart);
*hashes_done = (pdata[19] - first_nonce + 1)/2; *hashes_done = pdata[19] - first_nonce + 1;
return 0; return 0;
} }

25
util.c

@ -257,12 +257,12 @@ static size_t resp_hdr_cb(void *ptr, size_t size, size_t nmemb, void *user_data)
goto out; goto out;
if (!strcasecmp("X-Long-Polling", key)) { if (!strcasecmp("X-Long-Polling", key)) {
hi->lp_path = val; /* steal memory reference */ hi->lp_path = val; /* X-Mining-Extensions: longpoll */
val = NULL; val = NULL;
} }
if (!strcasecmp("X-Reject-Reason", key)) { if (!strcasecmp("X-Reject-Reason", key)) {
hi->reason = val; /* steal memory reference */ hi->reason = val; /* X-Mining-Extensions: reject-reason */
val = NULL; val = NULL;
} }
@ -389,7 +389,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, len_hdr); headers = curl_slist_append(headers, len_hdr);
headers = curl_slist_append(headers, "User-Agent: " USER_AGENT); headers = curl_slist_append(headers, "User-Agent: " USER_AGENT);
headers = curl_slist_append(headers, "X-Mining-Extensions: midstate"); headers = curl_slist_append(headers, "X-Mining-Extensions: longpoll midstate reject-reason");
headers = curl_slist_append(headers, "Accept:"); /* disable Accept hdr*/ headers = curl_slist_append(headers, "Accept:"); /* disable Accept hdr*/
headers = curl_slist_append(headers, "Expect:"); /* disable Expect hdr*/ headers = curl_slist_append(headers, "Expect:"); /* disable Expect hdr*/
@ -433,7 +433,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
if (opt_protocol) { if (opt_protocol) {
char *s = json_dumps(val, JSON_INDENT(3)); char *s = json_dumps(val, JSON_INDENT(3));
applog(LOG_DEBUG, "JSON protocol response:\n%s", s); applog(LOG_DEBUG, "JSON protocol response:\n%s\n", s);
free(s); free(s);
} }
@ -476,15 +476,22 @@ err_out:
return NULL; return NULL;
} }
char *bin2hex(const unsigned char *p, size_t len) void cbin2hex(char *out, const char *in, size_t len)
{
if (out) {
unsigned int i;
for (i = 0; i < len; i++)
sprintf(out + (i * 2), "%02x", (uint8_t)in[i]);
}
}
char *bin2hex(const unsigned char *in, size_t len)
{ {
unsigned int i;
char *s = (char*)malloc((len * 2) + 1); char *s = (char*)malloc((len * 2) + 1);
if (!s) if (!s)
return NULL; return NULL;
for (i = 0; i < len; i++) cbin2hex(s, (const char *) in, len);
sprintf(s + (i * 2), "%02x", (unsigned int) p[i]);
return s; return s;
} }
@ -1433,7 +1440,7 @@ extern void applog_compare_hash(unsigned char *hash, unsigned char *hash2)
char s[256] = ""; char s[256] = "";
int len = 0; int len = 0;
for (int i=0; i < 32; i += 4) { for (int i=0; i < 32; i += 4) {
char *color = memcmp(hash+i, hash2+i, 4) ? CL_RED : CL_GRY; char *color = memcmp(hash+i, hash2+i, 4) ? CL_WHT : CL_GRY;
len += sprintf(s+len, "%s%02x%02x%02x%02x " CL_GRY, color, len += sprintf(s+len, "%s%02x%02x%02x%02x " CL_GRY, color,
hash[i], hash[i+1], hash[i+2], hash[i+3]); hash[i], hash[i+1], hash[i+2], hash[i+3]);
s[len] = '\0'; s[len] = '\0';

Loading…
Cancel
Save