This commit is contained in:
Jay D Dee
2023-03-13 14:54:38 -04:00
parent c6bc9d67fb
commit 7a91c41d74
5 changed files with 64 additions and 42 deletions

View File

@@ -65,6 +65,16 @@ If not what makes it happen or not happen?
Change Log Change Log
---------- ----------
v3.21.4
Reapply selected changes from v3.21.3.
#392 #379 #389 Fixed misaligned address segfault solo mining.
#392 Fixed conditional mining.
#392 Fixed cpu affinity on Ryzen CPUs using Windows binaries,
Windows binaries no longer support CPU groups,
Windows binaries support CPUs with up to 64 threads.
v3.21.3.1 UNRELEASED v3.21.3.1 UNRELEASED
Revert to 3.21.2 Revert to 3.21.2

20
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for cpuminer-opt 3.21.3.1. # Generated by GNU Autoconf 2.71 for cpuminer-opt 3.21.4.
# #
# #
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -608,8 +608,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='cpuminer-opt' PACKAGE_NAME='cpuminer-opt'
PACKAGE_TARNAME='cpuminer-opt' PACKAGE_TARNAME='cpuminer-opt'
PACKAGE_VERSION='3.21.3.1' PACKAGE_VERSION='3.21.4'
PACKAGE_STRING='cpuminer-opt 3.21.3.1' PACKAGE_STRING='cpuminer-opt 3.21.4'
PACKAGE_BUGREPORT='' PACKAGE_BUGREPORT=''
PACKAGE_URL='' PACKAGE_URL=''
@@ -1360,7 +1360,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures cpuminer-opt 3.21.3.1 to adapt to many kinds of systems. \`configure' configures cpuminer-opt 3.21.4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1432,7 +1432,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of cpuminer-opt 3.21.3.1:";; short | recursive ) echo "Configuration of cpuminer-opt 3.21.4:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -1538,7 +1538,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
cpuminer-opt configure 3.21.3.1 cpuminer-opt configure 3.21.4
generated by GNU Autoconf 2.71 generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc. Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1985,7 +1985,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by cpuminer-opt $as_me 3.21.3.1, which was It was created by cpuminer-opt $as_me 3.21.4, which was
generated by GNU Autoconf 2.71. Invocation command line was generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw $ $0$ac_configure_args_raw
@@ -3593,7 +3593,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='cpuminer-opt' PACKAGE='cpuminer-opt'
VERSION='3.21.3.1' VERSION='3.21.4'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -7508,7 +7508,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by cpuminer-opt $as_me 3.21.3.1, which was This file was extended by cpuminer-opt $as_me 3.21.4, which was
generated by GNU Autoconf 2.71. Invocation command line was generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -7576,7 +7576,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped' ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\ ac_cs_version="\\
cpuminer-opt config.status 3.21.3.1 cpuminer-opt config.status 3.21.4
configured by $0, generated by GNU Autoconf 2.71, configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View File

@@ -1,4 +1,4 @@
AC_INIT([cpuminer-opt], [3.21.3.1]) AC_INIT([cpuminer-opt], [3.21.4])
AC_PREREQ([2.59c]) AC_PREREQ([2.59c])
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM

View File

@@ -37,6 +37,7 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <jansson.h> #include <jansson.h>
#include <openssl/sha.h> #include <openssl/sha.h>
#include <mm_malloc.h>
#include "sysinfos.c" #include "sysinfos.c"
#include "algo/sha/sha256d.h" #include "algo/sha/sha256d.h"
@@ -317,8 +318,9 @@ static void affine_to_cpu( struct thr_info *thr )
if ( !ok ) if ( !ok )
{ {
last_error = GetLastError(); last_error = GetLastError();
applog( LOG_WARNING, "affine_to_cpu_mask for %u returned 0x%x", if ( !thread )
thread, last_error ); applog( LOG_WARNING, "Set affinity returned error 0x%x for thread %d",
last_error, thread );
} }
} }
@@ -1725,9 +1727,9 @@ static bool workio_get_work( struct workio_cmd *wc, CURL *curl )
struct work *ret_work; struct work *ret_work;
int failures = 0; int failures = 0;
ret_work = (struct work*) calloc( 1, sizeof(*ret_work) ); ret_work = (struct work*) _mm_malloc( sizeof(*ret_work), 32 );
if ( !ret_work ) if ( !ret_work ) return false;
return false; memset( ret_work, 0, sizeof(*ret_work) );
/* obtain new work from bitcoin via JSON-RPC */ /* obtain new work from bitcoin via JSON-RPC */
while ( !get_upstream_work( curl, ret_work ) ) while ( !get_upstream_work( curl, ret_work ) )
@@ -1736,22 +1738,23 @@ static bool workio_get_work( struct workio_cmd *wc, CURL *curl )
{ {
applog( LOG_ERR, "json_rpc_call failed, terminating workio thread" ); applog( LOG_ERR, "json_rpc_call failed, terminating workio thread" );
free( ret_work ); free( ret_work );
return false; return false;
} }
/* pause, then restart work-request loop */ /* pause, then restart work-request loop */
applog( LOG_ERR, "json_rpc_call failed, retry after %d seconds", applog( LOG_ERR, "json_rpc_call failed, retry after %d seconds",
opt_fail_pause ); opt_fail_pause );
sleep( opt_fail_pause ); sleep( opt_fail_pause );
} }
/* send work to requesting thread */ /* send work to requesting thread */
if ( !tq_push(wc->thr->q, ret_work ) ) if ( !tq_push(wc->thr->q, ret_work ) )
free( ret_work ); free( ret_work );
return true; return true;
} }
static bool workio_submit_work(struct workio_cmd *wc, CURL *curl) static bool workio_submit_work(struct workio_cmd *wc, CURL *curl)
{ {
int failures = 0; int failures = 0;
@@ -1970,15 +1973,15 @@ static bool wanna_mine(int thr_id)
float temp = cpu_temp(0); float temp = cpu_temp(0);
if (temp > opt_max_temp) if (temp > opt_max_temp)
{ {
if (!thr_id && !conditional_state[thr_id] && !opt_quiet) if ( !thr_id && !conditional_state[thr_id] && !opt_quiet )
applog(LOG_INFO, "temperature too high (%.0fC), waiting...", temp); applog(LOG_NOTICE, "CPU temp too high: %.0fC max %.0f, waiting...", temp, opt_max_temp );
state = false; state = false;
} }
} }
if (opt_max_diff > 0.0 && net_diff > opt_max_diff) if (opt_max_diff > 0.0 && net_diff > opt_max_diff)
{ {
if (!thr_id && !conditional_state[thr_id] && !opt_quiet) if (!thr_id && !conditional_state[thr_id] && !opt_quiet)
applog(LOG_INFO, "network diff too high, waiting..."); applog(LOG_NOTICE, "network diff too high, waiting...");
state = false; state = false;
} }
if (opt_max_rate > 0.0 && net_hashrate > opt_max_rate) if (opt_max_rate > 0.0 && net_hashrate > opt_max_rate)
@@ -1987,12 +1990,14 @@ static bool wanna_mine(int thr_id)
{ {
char rate[32]; char rate[32];
format_hashrate(opt_max_rate, rate); format_hashrate(opt_max_rate, rate);
applog(LOG_INFO, "network hashrate too high, waiting %s...", rate); applog(LOG_NOTICE, "network hashrate too high (%s), waiting...", rate);
} }
state = false; state = false;
} }
if (thr_id < MAX_CPUS)
conditional_state[thr_id] = (uint8_t) !state; if ( conditional_state[thr_id] && state && !thr_id && !opt_quiet )
applog(LOG_NOTICE, "...resuming" );
conditional_state[thr_id] = (uint8_t) !state;
return state; return state;
} }
@@ -2140,7 +2145,7 @@ static void stratum_gen_work( struct stratum_ctx *sctx, struct work *g_work )
else if ( g_work->job_id && new_job ) else if ( g_work->job_id && new_job )
applog( LOG_BLUE, "New Work: Block %d, Net diff %.5g, Job %s", applog( LOG_BLUE, "New Work: Block %d, Net diff %.5g, Job %s",
sctx->block_height, net_diff, g_work->job_id ); sctx->block_height, net_diff, g_work->job_id );
else if ( !opt_quiet ) else if ( opt_debug )
{ {
unsigned char *xnonce2str = bebin2hex( g_work->xnonce2, unsigned char *xnonce2str = bebin2hex( g_work->xnonce2,
g_work->xnonce2_len ); g_work->xnonce2_len );
@@ -2354,6 +2359,14 @@ static void *miner_thread( void *userdata )
if ( unlikely( !algo_gate.ready_to_mine( &work, &stratum, thr_id ) ) ) if ( unlikely( !algo_gate.ready_to_mine( &work, &stratum, thr_id ) ) )
continue; continue;
// conditional mining
if ( unlikely( !wanna_mine( thr_id ) ) )
{
restart_threads();
sleep(5);
continue;
}
// opt_scantime expressed in hashes // opt_scantime expressed in hashes
max64 = opt_scantime * thr_hashrates[thr_id]; max64 = opt_scantime * thr_hashrates[thr_id];
@@ -2500,14 +2513,6 @@ static void *miner_thread( void *userdata )
} }
} }
} // benchmark } // benchmark
// conditional mining
if ( unlikely( !wanna_mine( thr_id ) ) )
{
sleep(5);
continue;
}
} // miner_thread loop } // miner_thread loop
out: out:
@@ -3682,7 +3687,7 @@ int main(int argc, char *argv[])
#if defined(WIN32) #if defined(WIN32)
// Are Windows CPU Groups supported? // Get the number of cpus, display after parsing command line
#if defined(WINDOWS_CPU_GROUPS_ENABLED) #if defined(WINDOWS_CPU_GROUPS_ENABLED)
num_cpus = 0; num_cpus = 0;
num_cpugroups = GetActiveProcessorGroupCount(); num_cpugroups = GetActiveProcessorGroupCount();
@@ -3691,8 +3696,8 @@ int main(int argc, char *argv[])
int cpus = GetActiveProcessorCount( i ); int cpus = GetActiveProcessorCount( i );
num_cpus += cpus; num_cpus += cpus;
if (opt_debug) // if (opt_debug)
applog( LOG_INFO, "Found %d CPUs in CPU group %d", cpus, i ); // applog( LOG_INFO, "Found %d CPUs in CPU group %d", cpus, i );
} }
#else #else
@@ -3709,7 +3714,7 @@ int main(int argc, char *argv[])
sysctl(req, 2, &num_cpus, &len, NULL, 0); sysctl(req, 2, &num_cpus, &len, NULL, 0);
#else #else
num_cpus = 1; num_cpus = 1;
#endif #endif
if ( num_cpus < 1 ) if ( num_cpus < 1 )
num_cpus = 1; num_cpus = 1;
@@ -3861,6 +3866,11 @@ int main(int argc, char *argv[])
} }
#endif #endif
#if defined(WIN32) && defined(WINDOWS_CPU_GROUPS_ENABLED)
if ( !opt_quiet )
applog( LOG_INFO, "Found %d CPUs in %d groups", num_cpus, num_cpugroups );
#endif
if ( opt_affinity && num_cpus > max_cpus ) if ( opt_affinity && num_cpus > max_cpus )
{ {
applog( LOG_WARNING, "More than %d CPUs, CPU affinity is disabled", applog( LOG_WARNING, "More than %d CPUs, CPU affinity is disabled",
@@ -3872,7 +3882,7 @@ int main(int argc, char *argv[])
{ {
for ( int thr = 0, cpu = 0; thr < opt_n_threads; thr++, cpu++ ) for ( int thr = 0, cpu = 0; thr < opt_n_threads; thr++, cpu++ )
{ {
while ( !( ( opt_affinity >> ( cpu&63 ) ) & 1ULL ) ) cpu++; while ( !( ( opt_affinity >> ( cpu & 63 ) ) & 1ULL ) ) cpu++;
thread_affinity_map[ thr ] = cpu % num_cpus; thread_affinity_map[ thr ] = cpu % num_cpus;
} }
if ( !opt_quiet ) if ( !opt_quiet )

View File

@@ -17,7 +17,9 @@ export GCC_MINGW_LIB="/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32"
# used by GCC # used by GCC
export LDFLAGS="-L$LOCAL_LIB/curl/lib/.libs -L$LOCAL_LIB/gmp/.libs -L$LOCAL_LIB/openssl" export LDFLAGS="-L$LOCAL_LIB/curl/lib/.libs -L$LOCAL_LIB/gmp/.libs -L$LOCAL_LIB/openssl"
# Support for Windows 7 CPU groups, AES sometimes not included in -march # Support for Windows 7 CPU groups, AES sometimes not included in -march
export DEFAULT_CFLAGS="-maes -O3 -Wall -D_WIN32_WINNT=0x0601" # CPU groups disabled due to incompatibilities between Intel and AMD CPUs.
#export DEFAULT_CFLAGS="-maes -O3 -Wall -D_WIN32_WINNT=0x0601"
export DEFAULT_CFLAGS="-maes -O3 -Wall"
export DEFAULT_CFLAGS_OLD="-O3 -Wall" export DEFAULT_CFLAGS_OLD="-O3 -Wall"
# make link to local gmp header file. # make link to local gmp header file.