Skip to content

Commit

Permalink
Version 2.0
Browse files Browse the repository at this point in the history
- Test the whole hash instead of just looking at the high 32 bits
- Set idle priority on Windows
- Fix parameters -u and -p, and add short options -o and -O
- Fix example JSON configuration file
  • Loading branch information
pooler committed Jan 16, 2012
1 parent a4d636a commit e0dc664
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 166 deletions.
2 changes: 0 additions & 2 deletions AUTHORS
Expand Up @@ -2,6 +2,4 @@ Jeff Garzik <jgarzik@pobox.com>

ArtForz

<very tiny tweaks> Lolcust

pooler <pooler@litecoinpool.org>
13 changes: 13 additions & 0 deletions NEWS
@@ -1,3 +1,16 @@
Version 2.0 - Jan 16, 2012

- Change default port to 9332 for Litecoin and remove default credentials
- Add 'scrypt' as the default algorithm and remove other algorithms (ArtForz)
- Optimize scrypt for x86 and x86-64
- Test the whole hash instead of just looking at the high 32 bits
- Add configurable timeout, with a default of 180 seconds
- Add share summary output (inlikeflynn)
- Fix priority and CPU count detection on Windows
- Fix parameters -u and -p, and add short options -o and -O

Version 1.0.2 - Jun 13, 2011

- Linux x86_64 optimisations - Con Kolivas
- Optimise for x86_64 by default by using sse2_64 algo
- Detects CPUs and sets number of threads accordingly
Expand Down
7 changes: 4 additions & 3 deletions README
@@ -1,4 +1,5 @@
This is a multi-threaded CPU miner for Litecoin, fork of Jeff Garzik's reference cpuminer.
This is a multi-threaded CPU miner for Litecoin, fork of Jeff Garzik's
reference cpuminer.


License: GPLv2. See COPYING for details.
Expand All @@ -10,13 +11,13 @@ Dependencies:

Basic *nix build instructions:
./autogen.sh # only needed if building from git repo
CFLAGS="-O3 -Wall -msse2" ./configure
./configure CFLAGS="-O3"
make

Basic WIN32 build instructions (on Fedora 13; requires mingw32):
./autogen.sh # only needed if building from git repo
rm -f mingw32-config.cache
MINGW32_CFLAGS="-O3 -Wall -msse2" mingw32-configure
MINGW32_CFLAGS="-O3" mingw32-configure
make
./mknsis.sh

Expand Down
3 changes: 1 addition & 2 deletions compat.h
Expand Up @@ -16,8 +16,7 @@ enum {

static inline int setpriority(int which, int who, int prio)
{
/* FIXME - actually do something */
return 0;
return -!SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
}

#endif /* WIN32 */
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
@@ -1,4 +1,4 @@
AC_INIT([cpuminer], [1.0.2])
AC_INIT([cpuminer], [2.0])

AC_PREREQ(2.52)
AC_CANONICAL_SYSTEM
Expand Down
45 changes: 26 additions & 19 deletions cpu-miner.c
Expand Up @@ -23,6 +23,7 @@
#include <windows.h>
#else
#include <sys/resource.h>
#include <sys/sysctl.h>
#endif
#include <getopt.h>
#include <jansson.h>
Expand Down Expand Up @@ -126,35 +127,33 @@ static struct option_help options_help[] = {
"(-h) Display this help text" },

{ "config FILE",
"(-c FILE) JSON-format configuration file (default: none)\n"
"See example-cfg.json for an example configuration." },
"(-c FILE) Load a JSON-format configuration file" },

{ "algo XXX",
"(-a XXX) Only scrypt (e.g. --algo scrypt) is supported" },
"(-a XXX) Specify the algorithm to use (default: scrypt)" },

{ "quiet",
"(-q) Disable per-thread hashmeter output (default: off)" },
"(-q) Disable per-thread hashmeter output" },

{ "debug",
"(-D) Enable debug output (default: off)" },
"(-D) Enable debug output" },

{ "no-longpoll",
"Disable X-Long-Polling support (default: enabled)" },
"Disable X-Long-Polling support" },

{ "protocol-dump",
"(-P) Verbose dump of protocol-level activities (default: off)" },
"(-P) Verbose dump of protocol-level activities" },

{ "retries N",
"(-r N) Number of times to retry if JSON-RPC call fails\n"
"\t(default: retry indefinitely)" },

{ "retry-pause N",
"(-R N) Number of seconds to pause between retries\n"
"\t(default: 30)" },
"(-R N) Number of seconds to pause between retries (default: 30)" },

{ "scantime N",
"(-s N) Upper bound on time spent scanning current work,\n"
"\tin seconds. (default: 5)" },
"(-s N) Upper bound on time spent scanning current work, in seconds\n"
"\t(default: 5)" },

{ "timeout N",
"(-T N) Connection timeout, in seconds (default: 180)" },
Expand All @@ -168,11 +167,11 @@ static struct option_help options_help[] = {
"(-t N) Number of miner threads (default: number of processors)" },

{ "url URL",
"URL for JSON-RPC server "
"(-o URL) URL for JSON-RPC server "
"(default: " DEF_RPC_URL ")" },

{ "userpass USERNAME:PASSWORD",
"Username:Password pair for JSON-RPC server" },
"(-O USERNAME:PASSWORD) Username:Password pair for JSON-RPC server" },

{ "user USERNAME",
"(-u USERNAME) Username for JSON-RPC server" },
Expand All @@ -198,9 +197,9 @@ static struct option options[] = {
#ifdef HAVE_SYSLOG_H
{ "syslog", 0, NULL, 1004 },
#endif
{ "url", 1, NULL, 1001 },
{ "url", 1, NULL, 'o' },
{ "user", 1, NULL, 'u' },
{ "userpass", 1, NULL, 1002 },
{ "userpass", 1, NULL, 'O' },

{ }
};
Expand Down Expand Up @@ -784,15 +783,15 @@ static void parse_arg (int key, char *arg)
free(rpc_user);
rpc_user = strdup(arg);
break;
case 1001: /* --url */
case 'o': /* --url */
if (strncmp(arg, "http://", 7) &&
strncmp(arg, "https://", 8))
show_usage();

free(rpc_url);
rpc_url = strdup(arg);
break;
case 1002: /* --userpass */
case 'O': /* --userpass */
if (!strchr(arg, ':'))
show_usage();

Expand All @@ -813,9 +812,17 @@ static void parse_arg (int key, char *arg)
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
num_processors = sysinfo.dwNumberOfProcessors;
#else
#elif defined(_SC_NPROCESSORS_ONLN)
num_processors = sysconf(_SC_NPROCESSORS_ONLN);
#elif defined(HW_NCPU)
int req[] = { CTL_HW, HW_NCPU };
size_t len = sizeof(num_processors);
v = sysctl(req, 2, &num_processors, &len, NULL, 0);
#else
num_processors = 1;
#endif
if (num_processors < 1)
num_processors = 1;
if (!opt_n_threads)
opt_n_threads = num_processors;
}
Expand Down Expand Up @@ -857,7 +864,7 @@ static void parse_cmdline(int argc, char *argv[])
int key;

while (1) {
key = getopt_long(argc, argv, "a:c:qDPr:s:T:t:h?", options, NULL);
key = getopt_long(argc, argv, "hc:a:qDPr:s:T:t:o:O:u:p:", options, NULL);
if (key < 0)
break;

Expand Down
4 changes: 2 additions & 2 deletions example-cfg.json
Expand Up @@ -2,11 +2,11 @@
"_comment1" : "Any long-format command line argument ",
"_comment2" : "may be used in this JSON configuration file",

"url" : "http://127.0.0.1:8332",
"url" : "http://127.0.0.1:9332/",
"user" : "rpcuser",
"pass" : "rpcpass",

"algo" : "sse2_64",
"algo" : "scrypt",
"threads" : "4",

"quiet" : true
Expand Down
173 changes: 39 additions & 134 deletions scrypt-x86.S
Expand Up @@ -27,6 +27,41 @@
#endif

#if defined(__i386__)

.macro scrypt_shuffle src, so, dest, do
movl \so+60(\src), %eax
movl \so+44(\src), %ebx
movl \so+28(\src), %ecx
movl \so+12(\src), %edx
movl %eax, \do+12(\dest)
movl %ebx, \do+28(\dest)
movl %ecx, \do+44(\dest)
movl %edx, \do+60(\dest)
movl \so+40(\src), %eax
movl \so+8(\src), %ebx
movl \so+48(\src), %ecx
movl \so+16(\src), %edx
movl %eax, \do+8(\dest)
movl %ebx, \do+40(\dest)
movl %ecx, \do+16(\dest)
movl %edx, \do+48(\dest)
movl \so+20(\src), %eax
movl \so+4(\src), %ebx
movl \so+52(\src), %ecx
movl \so+36(\src), %edx
movl %eax, \do+4(\dest)
movl %ebx, \do+20(\dest)
movl %ecx, \do+36(\dest)
movl %edx, \do+52(\dest)
movl \so+0(\src), %eax
movl \so+24(\src), %ebx
movl \so+32(\src), %ecx
movl \so+56(\src), %edx
movl %eax, \do+0(\dest)
movl %ebx, \do+24(\dest)
movl %ecx, \do+32(\dest)
movl %edx, \do+56(\dest)
.endm

.macro gen_salsa8_core_quadround
movl 52(%esp), %ecx
Expand Down Expand Up @@ -648,73 +683,8 @@ xmm_scrypt_core:
subl $128, %esp
andl $-16, %esp

# shuffle 1st block to (%esp)
movl 60(%edi), %edx
movl 44(%edi), %ecx
movl 28(%edi), %ebx
movl 12(%edi), %eax
movl %edx, 12(%esp)
movl %ecx, 28(%esp)
movl %ebx, 44(%esp)
movl %eax, 60(%esp)
movl 40(%edi), %ecx
movl 24(%edi), %ebx
movl 8(%edi), %eax
movl 56(%edi), %edx
movl %ecx, 8(%esp)
movl %ebx, 24(%esp)
movl %eax, 40(%esp)
movl %edx, 56(%esp)
movl 20(%edi), %ebx
movl 4(%edi), %eax
movl 52(%edi), %edx
movl 36(%edi), %ecx
movl %ebx, 4(%esp)
movl %eax, 20(%esp)
movl %edx, 36(%esp)
movl %ecx, 52(%esp)
movl 0(%edi), %eax
movl 48(%edi), %edx
movl 32(%edi), %ecx
movl 16(%edi), %ebx
movl %eax, 0(%esp)
movl %edx, 16(%esp)
movl %ecx, 32(%esp)
movl %ebx, 48(%esp)

# shuffle 2nd block to 64(%esp)
movl 124(%edi), %edx
movl 108(%edi), %ecx
movl 92(%edi), %ebx
movl 76(%edi), %eax
movl %edx, 76(%esp)
movl %ecx, 92(%esp)
movl %ebx, 108(%esp)
movl %eax, 124(%esp)
movl 104(%edi), %ecx
movl 88(%edi), %ebx
movl 72(%edi), %eax
movl 120(%edi), %edx
movl %ecx, 72(%esp)
movl %ebx, 88(%esp)
movl %eax, 104(%esp)
movl %edx, 120(%esp)
movl 84(%edi), %ebx
movl 68(%edi), %eax
movl 116(%edi), %edx
movl 100(%edi), %ecx
movl %ebx, 68(%esp)
movl %eax, 84(%esp)
movl %edx, 100(%esp)
movl %ecx, 116(%esp)
movl 64(%edi), %eax
movl 112(%edi), %edx
movl 96(%edi), %ecx
movl 80(%edi), %ebx
movl %eax, 64(%esp)
movl %edx, 80(%esp)
movl %ecx, 96(%esp)
movl %ebx, 112(%esp)
scrypt_shuffle %edi, 0, %esp, 0
scrypt_shuffle %edi, 64, %esp, 64

movdqa 96(%esp), %xmm6
movdqa 112(%esp), %xmm7
Expand Down Expand Up @@ -834,73 +804,8 @@ xmm_scrypt_core_loop2:
movdqa %xmm6, 96(%esp)
movdqa %xmm7, 112(%esp)

# re-shuffle 1st block back
movl 60(%esp), %edx
movl 44(%esp), %ecx
movl 28(%esp), %ebx
movl 12(%esp), %eax
movl %edx, 12(%edi)
movl %ecx, 28(%edi)
movl %ebx, 44(%edi)
movl %eax, 60(%edi)
movl 40(%esp), %ecx
movl 24(%esp), %ebx
movl 8(%esp), %eax
movl 56(%esp), %edx
movl %ecx, 8(%edi)
movl %ebx, 24(%edi)
movl %eax, 40(%edi)
movl %edx, 56(%edi)
movl 20(%esp), %ebx
movl 4(%esp), %eax
movl 52(%esp), %edx
movl 36(%esp), %ecx
movl %ebx, 4(%edi)
movl %eax, 20(%edi)
movl %edx, 36(%edi)
movl %ecx, 52(%edi)
movl 0(%esp), %eax
movl 48(%esp), %edx
movl 32(%esp), %ecx
movl 16(%esp), %ebx
movl %eax, 0(%edi)
movl %edx, 16(%edi)
movl %ecx, 32(%edi)
movl %ebx, 48(%edi)

# re-shuffle 2nd block back
movl 124(%esp), %edx
movl 108(%esp), %ecx
movl 92(%esp), %ebx
movl 76(%esp), %eax
movl %edx, 76(%edi)
movl %ecx, 92(%edi)
movl %ebx, 108(%edi)
movl %eax, 124(%edi)
movl 104(%esp), %ecx
movl 88(%esp), %ebx
movl 72(%esp), %eax
movl 120(%esp), %edx
movl %ecx, 72(%edi)
movl %ebx, 88(%edi)
movl %eax, 104(%edi)
movl %edx, 120(%edi)
movl 84(%esp), %ebx
movl 68(%esp), %eax
movl 116(%esp), %edx
movl 100(%esp), %ecx
movl %ebx, 68(%edi)
movl %eax, 84(%edi)
movl %edx, 100(%edi)
movl %ecx, 116(%edi)
movl 64(%esp), %eax
movl 112(%esp), %edx
movl 96(%esp), %ecx
movl 80(%esp), %ebx
movl %eax, 64(%edi)
movl %edx, 80(%edi)
movl %ecx, 96(%edi)
movl %ebx, 112(%edi)
scrypt_shuffle %esp, 0, %edi, 0
scrypt_shuffle %esp, 64, %edi, 64

movl %ebp, %esp
popl %esi
Expand Down

0 comments on commit e0dc664

Please sign in to comment.