mirror of
https://github.com/JayDDee/cpuminer-opt.git
synced 2025-09-17 23:44:27 +00:00
v25.3
This commit is contained in:
@@ -301,7 +301,7 @@ if USE_ASM
|
|||||||
disable_flags =
|
disable_flags =
|
||||||
cpuminer_SOURCES += asm/neoscrypt_asm.S
|
cpuminer_SOURCES += asm/neoscrypt_asm.S
|
||||||
else
|
else
|
||||||
disable_flags += -DNOASM
|
disable_flags = -DNOASM
|
||||||
endif
|
endif
|
||||||
|
|
||||||
cpuminer_LDFLAGS = @LDFLAGS@
|
cpuminer_LDFLAGS = @LDFLAGS@
|
||||||
|
@@ -55,9 +55,9 @@ Supported Algorithms
|
|||||||
allium Garlicoin
|
allium Garlicoin
|
||||||
anime Animecoin
|
anime Animecoin
|
||||||
argon2 Argon2 coin (AR2)
|
argon2 Argon2 coin (AR2)
|
||||||
argon2d250 argon2d-crds, Credits (CRDS)
|
argon2d250
|
||||||
argon2d500 argon2d-dyn, Dynamic (DYN)
|
argon2d500
|
||||||
argon2d4096 argon2d-uis, Unitus, (UIS)
|
argon2d4096
|
||||||
blake Blake-256
|
blake Blake-256
|
||||||
blake2b Blake2-512
|
blake2b Blake2-512
|
||||||
blake2s Blake2-256
|
blake2s Blake2-256
|
||||||
|
@@ -75,6 +75,13 @@ If not what makes it happen or not happen?
|
|||||||
Change Log
|
Change Log
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
v25.3
|
||||||
|
|
||||||
|
#442, #443: Fixed a regression in Makefile.am.
|
||||||
|
Updated dockerfile.
|
||||||
|
Removed algo features log display.
|
||||||
|
Some code cleanup.
|
||||||
|
|
||||||
v25.2
|
v25.2
|
||||||
|
|
||||||
ARM: Fixed regression from v25.1 that could cause build fail.
|
ARM: Fixed regression from v25.1 that could cause build fail.
|
||||||
|
@@ -295,8 +295,8 @@ bool register_algo_gate( int algo, algo_gate_t *gate )
|
|||||||
{
|
{
|
||||||
case ALGO_ALLIUM: rc = register_allium_algo ( gate ); break;
|
case ALGO_ALLIUM: rc = register_allium_algo ( gate ); break;
|
||||||
case ALGO_ANIME: rc = register_anime_algo ( gate ); break;
|
case ALGO_ANIME: rc = register_anime_algo ( gate ); break;
|
||||||
case ALGO_ARGON2D250: rc = register_argon2d_crds_algo ( gate ); break;
|
case ALGO_ARGON2D250: rc = register_argon2d250_algo ( gate ); break;
|
||||||
case ALGO_ARGON2D500: rc = register_argon2d_dyn_algo ( gate ); break;
|
case ALGO_ARGON2D500: rc = register_argon2d500_algo ( gate ); break;
|
||||||
case ALGO_ARGON2D4096: rc = register_argon2d4096_algo ( gate ); break;
|
case ALGO_ARGON2D4096: rc = register_argon2d4096_algo ( gate ); break;
|
||||||
case ALGO_AXIOM: rc = register_axiom_algo ( gate ); break;
|
case ALGO_AXIOM: rc = register_axiom_algo ( gate ); break;
|
||||||
case ALGO_BLAKE: rc = register_blake_algo ( gate ); break;
|
case ALGO_BLAKE: rc = register_blake_algo ( gate ); break;
|
||||||
@@ -416,8 +416,6 @@ void exec_hash_function( int algo, void *output, const void *pdata )
|
|||||||
const char* const algo_alias_map[][2] =
|
const char* const algo_alias_map[][2] =
|
||||||
{
|
{
|
||||||
// alias proper
|
// alias proper
|
||||||
{ "argon2d-dyn", "argon2d500" },
|
|
||||||
{ "argon2d-uis", "argon2d4096" },
|
|
||||||
{ "bcd", "x13bcd" },
|
{ "bcd", "x13bcd" },
|
||||||
{ "bitcore", "timetravel10" },
|
{ "bitcore", "timetravel10" },
|
||||||
{ "bitzeny", "yescryptr8" },
|
{ "bitzeny", "yescryptr8" },
|
||||||
|
@@ -6,9 +6,7 @@ static const size_t INPUT_BYTES = 80; // Lenth of a block header in bytes. Inpu
|
|||||||
static const size_t OUTPUT_BYTES = 32; // Length of output needed for a 256-bit hash
|
static const size_t OUTPUT_BYTES = 32; // Length of output needed for a 256-bit hash
|
||||||
static const unsigned int DEFAULT_ARGON2_FLAG = 2; //Same as ARGON2_DEFAULT_FLAGS
|
static const unsigned int DEFAULT_ARGON2_FLAG = 2; //Same as ARGON2_DEFAULT_FLAGS
|
||||||
|
|
||||||
// Credits
|
void argon2d250_hash( void *output, const void *input )
|
||||||
|
|
||||||
void argon2d_crds_hash( void *output, const void *input )
|
|
||||||
{
|
{
|
||||||
argon2_context context;
|
argon2_context context;
|
||||||
context.out = (uint8_t *)output;
|
context.out = (uint8_t *)output;
|
||||||
@@ -34,7 +32,7 @@ void argon2d_crds_hash( void *output, const void *input )
|
|||||||
argon2_ctx( &context, Argon2_d );
|
argon2_ctx( &context, Argon2_d );
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_argon2d_crds( struct work *work, uint32_t max_nonce,
|
int scanhash_argon2d250( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr )
|
uint64_t *hashes_done, struct thr_info *mythr )
|
||||||
{
|
{
|
||||||
uint32_t _ALIGN(64) edata[20];
|
uint32_t _ALIGN(64) edata[20];
|
||||||
@@ -50,7 +48,7 @@ int scanhash_argon2d_crds( struct work *work, uint32_t max_nonce,
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
be32enc(&edata[19], nonce);
|
be32enc(&edata[19], nonce);
|
||||||
argon2d_crds_hash( hash, edata );
|
argon2d250_hash( hash, edata );
|
||||||
if ( hash[7] <= Htarg && fulltest( hash, ptarget ) && !opt_benchmark )
|
if ( hash[7] <= Htarg && fulltest( hash, ptarget ) && !opt_benchmark )
|
||||||
{
|
{
|
||||||
pdata[19] = nonce;
|
pdata[19] = nonce;
|
||||||
@@ -64,18 +62,16 @@ int scanhash_argon2d_crds( struct work *work, uint32_t max_nonce,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool register_argon2d_crds_algo( algo_gate_t* gate )
|
bool register_argon2d250_algo( algo_gate_t* gate )
|
||||||
{
|
{
|
||||||
gate->scanhash = (void*)&scanhash_argon2d_crds;
|
gate->scanhash = (void*)&scanhash_argon2d250;
|
||||||
gate->hash = (void*)&argon2d_crds_hash;
|
gate->hash = (void*)&argon2d250_hash;
|
||||||
gate->optimizations = SSE2_OPT | AVX2_OPT | AVX512_OPT | NEON_OPT;
|
gate->optimizations = SSE2_OPT | AVX2_OPT | AVX512_OPT | NEON_OPT;
|
||||||
opt_target_factor = 65536.0;
|
opt_target_factor = 65536.0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dynamic
|
void argon2d500_hash( void *output, const void *input )
|
||||||
|
|
||||||
void argon2d_dyn_hash( void *output, const void *input )
|
|
||||||
{
|
{
|
||||||
argon2_context context;
|
argon2_context context;
|
||||||
context.out = (uint8_t *)output;
|
context.out = (uint8_t *)output;
|
||||||
@@ -101,7 +97,7 @@ void argon2d_dyn_hash( void *output, const void *input )
|
|||||||
argon2_ctx( &context, Argon2_d );
|
argon2_ctx( &context, Argon2_d );
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_argon2d_dyn( struct work *work, uint32_t max_nonce,
|
int scanhash_argon2d500( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr )
|
uint64_t *hashes_done, struct thr_info *mythr )
|
||||||
{
|
{
|
||||||
uint32_t _ALIGN(64) edata[20];
|
uint32_t _ALIGN(64) edata[20];
|
||||||
@@ -118,7 +114,7 @@ int scanhash_argon2d_dyn( struct work *work, uint32_t max_nonce,
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
edata[19] = nonce;
|
edata[19] = nonce;
|
||||||
argon2d_dyn_hash( hash, edata );
|
argon2d500_hash( hash, edata );
|
||||||
if ( unlikely( valid_hash( (uint64_t*)hash, (uint64_t*)ptarget )
|
if ( unlikely( valid_hash( (uint64_t*)hash, (uint64_t*)ptarget )
|
||||||
&& !bench ) )
|
&& !bench ) )
|
||||||
{
|
{
|
||||||
@@ -133,17 +129,15 @@ int scanhash_argon2d_dyn( struct work *work, uint32_t max_nonce,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool register_argon2d_dyn_algo( algo_gate_t* gate )
|
bool register_argon2d500_algo( algo_gate_t* gate )
|
||||||
{
|
{
|
||||||
gate->scanhash = (void*)&scanhash_argon2d_dyn;
|
gate->scanhash = (void*)&scanhash_argon2d500;
|
||||||
gate->hash = (void*)&argon2d_dyn_hash;
|
gate->hash = (void*)&argon2d500_hash;
|
||||||
gate->optimizations = SSE2_OPT | AVX2_OPT | AVX512_OPT | NEON_OPT;
|
gate->optimizations = SSE2_OPT | AVX2_OPT | AVX512_OPT | NEON_OPT;
|
||||||
opt_target_factor = 65536.0;
|
opt_target_factor = 65536.0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unitus
|
|
||||||
|
|
||||||
int scanhash_argon2d4096( struct work *work, uint32_t max_nonce,
|
int scanhash_argon2d4096( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr )
|
uint64_t *hashes_done, struct thr_info *mythr )
|
||||||
{
|
{
|
||||||
|
@@ -5,19 +5,19 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
// Credits: version = 0x10, m_cost = 250.
|
// Credits: version = 0x10, m_cost = 250.
|
||||||
bool register_argon2d_crds_algo( algo_gate_t* gate );
|
bool register_argon2d250_algo( algo_gate_t* gate );
|
||||||
|
|
||||||
void argon2d_crds_hash( void *state, const void *input );
|
void argon2d250_hash( void *state, const void *input );
|
||||||
|
|
||||||
int scanhash_argon2d_crds( struct work *work, uint32_t max_nonce,
|
int scanhash_argon2d250( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
|
|
||||||
// Dynamic: version = 0x10, m_cost = 500.
|
// Dynamic: version = 0x10, m_cost = 500.
|
||||||
bool register_argon2d_dyn_algo( algo_gate_t* gate );
|
bool register_argon2d500_algo( algo_gate_t* gate );
|
||||||
|
|
||||||
void argon2d_dyn_hash( void *state, const void *input );
|
void argon2d500_hash( void *state, const void *input );
|
||||||
|
|
||||||
int scanhash_argon2d_dyn( struct work *work, uint32_t max_nonce,
|
int scanhash_argon2d500( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
|
|
||||||
|
|
||||||
|
@@ -274,9 +274,6 @@ static inline void PBKDF2_SHA256_128_32_SHA_2BUF( uint32_t *tstate0,
|
|||||||
|
|
||||||
#endif // SHA
|
#endif // SHA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const uint32_t keypad_4way[ 4*12 ] __attribute((aligned(32))) =
|
static const uint32_t keypad_4way[ 4*12 ] __attribute((aligned(32))) =
|
||||||
{
|
{
|
||||||
0x80000000, 0x80000000, 0x80000000, 0x80000000,
|
0x80000000, 0x80000000, 0x80000000, 0x80000000,
|
||||||
@@ -447,7 +444,7 @@ static inline void PBKDF2_SHA256_128_32_4way( uint32_t *tstate,
|
|||||||
output[i] = bswap_32( ostate[i] );
|
output[i] = bswap_32( ostate[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SHA256_8WAY
|
#if defined(__AVX2__)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static const uint32_t _ALIGN(32) finalblk_8way[8 * 16] = {
|
static const uint32_t _ALIGN(32) finalblk_8way[8 * 16] = {
|
||||||
@@ -590,7 +587,7 @@ static inline void PBKDF2_SHA256_128_32_8way( uint32_t *tstate,
|
|||||||
output[i] = bswap_32(ostate[i]);
|
output[i] = bswap_32(ostate[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_SHA256_8WAY */
|
#endif //AVX2
|
||||||
|
|
||||||
#if defined(SIMD512)
|
#if defined(SIMD512)
|
||||||
|
|
||||||
@@ -724,25 +721,10 @@ static inline void PBKDF2_SHA256_128_32_16way( uint32_t *tstate,
|
|||||||
|
|
||||||
#endif // AVX512
|
#endif // AVX512
|
||||||
|
|
||||||
#define SCRYPT_MAX_WAYS 12
|
|
||||||
#define HAVE_SCRYPT_3WAY 1
|
|
||||||
void scrypt_core(uint32_t *X, uint32_t *V, int N);
|
|
||||||
void scrypt_core_3way(uint32_t *X, uint32_t *V, int N);
|
|
||||||
|
|
||||||
#if defined(__AVX2__)
|
|
||||||
#undef SCRYPT_MAX_WAYS
|
|
||||||
#define SCRYPT_MAX_WAYS 24
|
|
||||||
#define HAVE_SCRYPT_6WAY 1
|
|
||||||
void scrypt_core_6way(uint32_t *X, uint32_t *V, int N);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SCRYPT_MAX_WAYS
|
|
||||||
#define SCRYPT_MAX_WAYS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "scrypt-core-4way.h"
|
#include "scrypt-core-4way.h"
|
||||||
|
|
||||||
/*
|
#if ( SCRYPT_THROUGHPUT == 1 )
|
||||||
|
|
||||||
static bool scrypt_N_1_1_256( const uint32_t *input, uint32_t *output,
|
static bool scrypt_N_1_1_256( const uint32_t *input, uint32_t *output,
|
||||||
uint32_t *midstate, int N, int thr_id )
|
uint32_t *midstate, int N, int thr_id )
|
||||||
{
|
{
|
||||||
@@ -752,15 +734,12 @@ static bool scrypt_N_1_1_256( const uint32_t *input, uint32_t *output,
|
|||||||
memcpy(tstate, midstate, 32);
|
memcpy(tstate, midstate, 32);
|
||||||
HMAC_SHA256_80_init(input, tstate, ostate);
|
HMAC_SHA256_80_init(input, tstate, ostate);
|
||||||
PBKDF2_SHA256_80_128(tstate, ostate, input, X);
|
PBKDF2_SHA256_80_128(tstate, ostate, input, X);
|
||||||
|
scrypt_core_1way( X, scratchbuf, N );
|
||||||
scrypt_core_simd128( X, scratchbuf, N ); // woring
|
|
||||||
// scrypt_core_1way( X, V, N ); // working
|
|
||||||
// scrypt_core(X, V, N);
|
|
||||||
|
|
||||||
PBKDF2_SHA256_128_32(tstate, ostate, X, output);
|
PBKDF2_SHA256_128_32(tstate, ostate, X, output);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( SCRYPT_THROUGHPUT == 8 )
|
#if ( SCRYPT_THROUGHPUT == 8 )
|
||||||
|
|
||||||
@@ -1201,20 +1180,6 @@ static int scrypt_N_1_1_256_16way( const uint32_t *input, uint32_t *output,
|
|||||||
if ( work_restart[thrid].restart ) return 0;
|
if ( work_restart[thrid].restart ) return 0;
|
||||||
scrypt_core_simd128_2buf( X+448, V, N );
|
scrypt_core_simd128_2buf( X+448, V, N );
|
||||||
********************/
|
********************/
|
||||||
/*
|
|
||||||
scrypt_core_3way( X, V, N );
|
|
||||||
if ( work_restart[thrid].restart ) return 0;
|
|
||||||
scrypt_core_3way( X+ 96, V, N );
|
|
||||||
if ( work_restart[thrid].restart ) return 0;
|
|
||||||
scrypt_core_simd128_2buf( X+192, V, N );
|
|
||||||
if ( work_restart[thrid].restart ) return 0;
|
|
||||||
scrypt_core_3way( X+256, V, N );
|
|
||||||
if ( work_restart[thrid].restart ) return 0;
|
|
||||||
scrypt_core_3way( X+352, V, N );
|
|
||||||
if ( work_restart[thrid].restart ) return 0;
|
|
||||||
scrypt_core_simd128_2buf( X+448, V, N );
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
if ( work_restart[thrid].restart ) return 0;
|
if ( work_restart[thrid].restart ) return 0;
|
||||||
|
|
||||||
@@ -1321,8 +1286,7 @@ static int scrypt_N_1_1_256_4way_sha( const uint32_t *input, uint32_t *output,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#elif defined(__SSE2__) || defined(__ARM_NEON)
|
||||||
// SSE2
|
|
||||||
|
|
||||||
static int scrypt_N_1_1_256_4way( const uint32_t *input, uint32_t *output,
|
static int scrypt_N_1_1_256_4way( const uint32_t *input, uint32_t *output,
|
||||||
uint32_t *midstate, int N, int thrid )
|
uint32_t *midstate, int N, int thrid )
|
||||||
@@ -1481,7 +1445,7 @@ bool scrypt_miner_thread_init( int thr_id )
|
|||||||
bool register_scrypt_algo( algo_gate_t* gate )
|
bool register_scrypt_algo( algo_gate_t* gate )
|
||||||
{
|
{
|
||||||
#if defined(__SHA__) || defined(__ARM_FEATURE_SHA2)
|
#if defined(__SHA__) || defined(__ARM_FEATURE_SHA2)
|
||||||
gate->optimizations = SSE2_OPT | SHA256_OPT | NEON_OPT;
|
gate->optimizations = SSE2_OPT | SSE42_OPT | AVX_OPT | SHA256_OPT | NEON_OPT;
|
||||||
#else
|
#else
|
||||||
gate->optimizations = SSE2_OPT | SSE42_OPT | AVX_OPT | AVX2_OPT | AVX512_OPT | NEON_OPT;
|
gate->optimizations = SSE2_OPT | SSE42_OPT | AVX_OPT | AVX2_OPT | AVX512_OPT | NEON_OPT;
|
||||||
#endif
|
#endif
|
||||||
@@ -1491,31 +1455,31 @@ bool register_scrypt_algo( algo_gate_t* gate )
|
|||||||
opt_param_n = opt_param_n ? opt_param_n : 1024;
|
opt_param_n = opt_param_n ? opt_param_n : 1024;
|
||||||
applog( LOG_INFO,"Scrypt paramaters: N= %d, R= 1", opt_param_n );
|
applog( LOG_INFO,"Scrypt paramaters: N= %d, R= 1", opt_param_n );
|
||||||
|
|
||||||
// scrypt_throughput defined at compile time and used to replace
|
switch ( SCRYPT_THROUGHPUT )
|
||||||
// MAX_WAYS to reduce memory usage.
|
{
|
||||||
|
case 16: // AVX512
|
||||||
#if defined(SIMD512)
|
|
||||||
// scrypt_throughput = 16;
|
|
||||||
if ( opt_param_n > 0x4000 )
|
if ( opt_param_n > 0x4000 )
|
||||||
scratchbuf_size = opt_param_n * 3 * 128; // 3 buf
|
scratchbuf_size = opt_param_n * 3 * 128; // 3 buf
|
||||||
else
|
else
|
||||||
scratchbuf_size = opt_param_n * 4 * 128; // 4 way
|
scratchbuf_size = opt_param_n * 4 * 128; // 4 way
|
||||||
#elif defined(__SHA__) || defined(__ARM_FEATURE_SHA2)
|
break;
|
||||||
// scrypt_throughput = 2;
|
case 2: // SHA256
|
||||||
scratchbuf_size = opt_param_n * 2 * 128; // 2 buf
|
scratchbuf_size = opt_param_n * 2 * 128; // 2 buf
|
||||||
#elif defined(__AVX2__)
|
break;
|
||||||
// scrypt_throughput = 8;
|
case 8: // AVX2
|
||||||
if ( opt_param_n > 0x4000 )
|
if ( opt_param_n > 0x4000 )
|
||||||
scratchbuf_size = opt_param_n * 3 * 128; // 3 buf
|
scratchbuf_size = opt_param_n * 3 * 128; // 3 buf
|
||||||
else
|
else
|
||||||
scratchbuf_size = opt_param_n * 2 * 128; // 2 way
|
scratchbuf_size = opt_param_n * 2 * 128; // 2 way
|
||||||
#else
|
break;
|
||||||
// scrypt_throughput = 4;
|
case 4: // SSE2, NEON
|
||||||
if ( opt_param_n > 0x4000 )
|
if ( opt_param_n > 0x4000 )
|
||||||
scratchbuf_size = opt_param_n * 2 * 128; // 2 buf
|
scratchbuf_size = opt_param_n * 2 * 128; // 2 buf
|
||||||
else
|
else
|
||||||
scratchbuf_size = opt_param_n * 4 * 128; // 4 way
|
scratchbuf_size = opt_param_n * 4 * 128; // 4 way
|
||||||
#endif
|
default:
|
||||||
|
scratchbuf_size = opt_param_n; // 1 way
|
||||||
|
}
|
||||||
|
|
||||||
char t_units[4] = {0};
|
char t_units[4] = {0};
|
||||||
char d_units[4] = {0};
|
char d_units[4] = {0};
|
||||||
|
@@ -1,27 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
#if [ "$OS" = "Windows_NT" ]; then
|
|
||||||
# ./mingw64.sh
|
|
||||||
# exit 0
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# Linux build
|
# Linux build
|
||||||
|
|
||||||
make distclean || echo clean
|
make distclean || echo clean
|
||||||
|
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
./autogen.sh || echo done
|
./autogen.sh || echo done
|
||||||
|
|
||||||
# Ubuntu 10.04 (gcc 4.4)
|
|
||||||
# extracflags="-O3 -march=native -Wall -D_REENTRANT -funroll-loops -fvariable-expansion-in-unroller -fmerge-all-constants -fbranch-target-load-optimize2 -fsched2-use-superblocks -falign-loops=16 -falign-functions=16 -falign-jumps=16 -falign-labels=16"
|
|
||||||
|
|
||||||
# Debian 7.7 / Ubuntu 14.04 (gcc 4.7+)
|
|
||||||
#extracflags="$extracflags -Ofast -flto -fuse-linker-plugin -ftree-loop-if-convert-stores"
|
|
||||||
|
|
||||||
#CFLAGS="-O3 -march=native -Wall" ./configure --with-curl --with-crypto=$HOME/usr
|
|
||||||
CFLAGS="-O3 -march=haswell -maes -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=haswell -maes -Wall" ./configure --with-curl
|
||||||
#CFLAGS="-O3 -march=native -Wall" CXXFLAGS="$CFLAGS -std=gnu++11" ./configure --with-curl
|
|
||||||
|
|
||||||
make -j $(nproc)
|
make -j $(nproc)
|
||||||
|
|
||||||
strip -s cpuminer
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
AC_INIT([cpuminer-opt], [25.2])
|
AC_INIT([cpuminer-opt], [25.3])
|
||||||
|
|
||||||
AC_PREREQ([2.59c])
|
AC_PREREQ([2.59c])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
|
1857
configure~
1857
configure~
File diff suppressed because it is too large
Load Diff
@@ -2878,6 +2878,7 @@ static bool cpu_capability( bool display_only )
|
|||||||
bool sw_has_vaes = false;
|
bool sw_has_vaes = false;
|
||||||
bool sw_has_sha256 = false; // x86_64 or AArch64
|
bool sw_has_sha256 = false; // x86_64 or AArch64
|
||||||
bool sw_has_sha512 = false; // x86_64 or AArch64
|
bool sw_has_sha512 = false; // x86_64 or AArch64
|
||||||
|
/*
|
||||||
set_t algo_features = algo_gate.optimizations;
|
set_t algo_features = algo_gate.optimizations;
|
||||||
bool algo_has_sse2 = set_incl( SSE2_OPT, algo_features );
|
bool algo_has_sse2 = set_incl( SSE2_OPT, algo_features );
|
||||||
bool algo_has_sse42 = set_incl( SSE42_OPT, algo_features );
|
bool algo_has_sse42 = set_incl( SSE42_OPT, algo_features );
|
||||||
@@ -2900,7 +2901,7 @@ static bool cpu_capability( bool display_only )
|
|||||||
bool use_sha512;
|
bool use_sha512;
|
||||||
bool use_neon;
|
bool use_neon;
|
||||||
bool use_none;
|
bool use_none;
|
||||||
|
*/
|
||||||
#if defined(__x86_64__)
|
#if defined(__x86_64__)
|
||||||
sw_has_x86_64 = true;
|
sw_has_x86_64 = true;
|
||||||
#elif defined(__aarch64__)
|
#elif defined(__aarch64__)
|
||||||
@@ -3057,6 +3058,9 @@ static bool cpu_capability( bool display_only )
|
|||||||
if ( sw_has_sha512 ) printf( " SHA512" );
|
if ( sw_has_sha512 ) printf( " SHA512" );
|
||||||
else if ( sw_has_sha256 ) printf( " SHA256" );
|
else if ( sw_has_sha256 ) printf( " SHA256" );
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
/*
|
||||||
if ( !display_only )
|
if ( !display_only )
|
||||||
{
|
{
|
||||||
printf("\nAlgo features:");
|
printf("\nAlgo features:");
|
||||||
@@ -3076,6 +3080,7 @@ static bool cpu_capability( bool display_only )
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
if ( display_only ) return true;
|
if ( display_only ) return true;
|
||||||
|
|
||||||
// Determine mining options
|
// Determine mining options
|
||||||
@@ -3108,6 +3113,7 @@ static bool cpu_capability( bool display_only )
|
|||||||
else if ( use_sha256 ) printf( " SHA256" );
|
else if ( use_sha256 ) printf( " SHA256" );
|
||||||
printf( "\n" );
|
printf( "\n" );
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
25
miner.h
25
miner.h
@@ -289,26 +289,6 @@ static inline void le16enc(void *pp, uint16_t x)
|
|||||||
|
|
||||||
json_t* json_load_url(char* cfg_url, json_error_t *err);
|
json_t* json_load_url(char* cfg_url, json_error_t *err);
|
||||||
|
|
||||||
//void sha256_init(uint32_t *state);
|
|
||||||
//void sha256_transform(uint32_t *state, const uint32_t *block, int swap);
|
|
||||||
//void sha256d(unsigned char *hash, const unsigned char *data, int len);
|
|
||||||
|
|
||||||
#ifdef USE_ASM
|
|
||||||
#if defined(__ARM_NEON__) || defined(__i386__) || defined(__x86_64__)
|
|
||||||
#define HAVE_SHA256_4WAY 1
|
|
||||||
int sha256_use_4way();
|
|
||||||
void sha256_init_4way(uint32_t *state);
|
|
||||||
void sha256_transform_4way(uint32_t *state, const uint32_t *block, int swap);
|
|
||||||
#endif
|
|
||||||
//#if defined(__x86_64__) && defined(USE_AVX2)
|
|
||||||
#if defined(__x86_64__) && defined(__AVX2__)
|
|
||||||
#define HAVE_SHA256_8WAY 1
|
|
||||||
int sha256_use_8way();
|
|
||||||
void sha256_init_8way(uint32_t *state);
|
|
||||||
void sha256_transform_8way(uint32_t *state, const uint32_t *block, int swap);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct work;
|
struct work;
|
||||||
|
|
||||||
void work_free(struct work *w);
|
void work_free(struct work *w);
|
||||||
@@ -851,10 +831,9 @@ Options:\n\
|
|||||||
-a, --algo=ALGO specify the algorithm to use\n\
|
-a, --algo=ALGO specify the algorithm to use\n\
|
||||||
allium Garlicoin (GRLC)\n\
|
allium Garlicoin (GRLC)\n\
|
||||||
anime Animecoin (ANI)\n\
|
anime Animecoin (ANI)\n\
|
||||||
argon2 Argon2 Coin (AR2)\n\
|
|
||||||
argon2d250\n\
|
argon2d250\n\
|
||||||
argon2d500 argon2d-dyn, Dynamic (DYN)\n\
|
argon2d500\n\
|
||||||
argon2d4096 argon2d-uis, Unitus (UIS)\n\
|
argon2d4096\n\
|
||||||
axiom Shabal-256 MemoHash\n\
|
axiom Shabal-256 MemoHash\n\
|
||||||
blake blake256r14 (SFR)\n\
|
blake blake256r14 (SFR)\n\
|
||||||
blake2b Blake2b 256\n\
|
blake2b Blake2b 256\n\
|
||||||
|
@@ -120,12 +120,12 @@ CFLAGS="-msse2 $DEFAULT_CFLAGS_OLD" ./configure $CONFIGURE_ARGS
|
|||||||
make -j 8
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-sse2.exe
|
mv cpuminer.exe release/cpuminer-sse2.exe
|
||||||
make clean || echo clean
|
#make clean || echo clean
|
||||||
|
|
||||||
# Native with CPU groups ennabled
|
# Native with CPU groups ennabled
|
||||||
make clean || echo clean
|
#make clean || echo clean
|
||||||
rm -f config.status
|
#rm -f config.status
|
||||||
CFLAGS="-march=native $DEFAULT_CFLAGS_OLD" ./configure $CONFIGURE_ARGS
|
#CFLAGS="-march=native $DEFAULT_CFLAGS_OLD" ./configure $CONFIGURE_ARGS
|
||||||
make -j 8
|
#make -j 8
|
||||||
strip -s cpuminer.exe
|
#strip -s cpuminer.exe
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user