+/* Filename for scrypt-jane kernel _/
+#undef SCRYPT_JANEKERNNAME
+
/ Define to l, ll, u, ul, ull, etc., as suitable for constants of type
'sig_atomic_t'. */
applog(LOG_INFO, "Selected standard scrypt kernel");
clState->chosen_kernel = KL_SCRYPT;
}
} else if (!strstr(name, "Tahiti") &&
/* Detect all 2.6 SDKs not with Tahiti and use diablo kernel /
(strstr(vbuff, "844.4") || // Linux 64 bit ATI 2.6 SDK
@@ -455,6 +461,12 @@
/ Scrypt only supports vector 1 */
cgpu->vwidth = 1;
break;
+}
+
+
+/* returns a pointer to item i, where item is len sj_scrypt_mix_word_t's long /
+static sj_scrypt_mix_word_t
+sj_scrypt_item(sj_scrypt_mix_word_t *base, sj_scrypt_mix_word_t i, sj_scrypt_mix_word_t len) {
return base + (i * len);
+}
+
+
+static sj_scrypt_mix_word_t
+sj_scrypt_block(sj_scrypt_mix_word_t base, sj_scrypt_mix_word_t i) {
diff -urN cgminer-3.7.2.orig/cgminer.c cgminer-3.7.2/cgminer.c --- cgminer-3.7.2.orig/cgminer.c 2013-11-06 00:24:07.000000000 +1100 +++ cgminer-3.7.2/cgminer.c 2014-01-02 17:30:53.821237874 +1100 @@ -58,6 +58,7 @@
include "driver-opencl.h"
include "bench_block.h"
include "scrypt.h"
+#include "scrypt-jane.h"
ifdef USE_USBUTILS
include "usbutils.h"
endif
@@ -113,6 +114,11 @@ unsigned long long global_hashrate; unsigned long global_quota_gcd = 1;
+/* scrypt-jane, defaults suitable for YAC */ +unsigned int sj_minNf = 4; +unsigned int sj_maxNf = 30; +unsigned int sj_startTime = 1388361600; +
if defined(HAVE_OPENCL) || defined(USE_USBUTILS)
int nDevs;
endif
@@ -122,6 +128,7 @@ int gpu_threads;
ifdef USE_SCRYPT
bool opt_scrypt; +bool opt_scrypt_jane;
endif
endif
bool opt_restart = true; @@ -650,6 +657,11 @@ return set_int_range(arg, i, 0, 10); }
+static char set_int_0_to_40(const char arg, int *i) +{
ifdef USE_AVALON
static char set_int_0_to_100(const char arg, int *i) { @@ -1373,6 +1385,18 @@ OPT_WITHOUT_ARG("--scrypt", opt_set_bool, &opt_scrypt, "Use the scrypt algorithm for mining (litecoin only)"),
OPT_WITH_ARG("--shaders", set_shaders, NULL, NULL, "GPU shaders per card for tuning scrypt, comma separated"), @@ -3802,10 +3826,17 @@
static void rebuild_hash(struct work *work) {
} }
static bool cnx_needed(struct pool *pool); @@ -4480,6 +4511,9 @@ case KL_SCRYPT: fprintf(fcfg, "scrypt"); break;
ifdef USE_SCRYPT
@@ -6202,7 +6236,11 @@ { uint32_t work_nonce = (uint32_t )(work->data + 64 + 12);
}
rebuild_hash(work); } @@ -8114,6 +8152,10 @@ if (!config_loaded) load_default_config();
diff -urN cgminer-3.7.2.orig/config.h.in cgminer-3.7.2/config.h.in --- cgminer-3.7.2.orig/config.h.in 2013-11-06 00:29:24.000000000 +1100 +++ cgminer-3.7.2/config.h.in 2014-01-02 17:30:53.829238126 +1100 @@ -334,6 +334,9 @@ /* Filename for scrypt kernel */
undef SCRYPT_KERNNAME
+/* Filename for scrypt-jane kernel _/ +#undef SCRYPT_JANEKERNNAME + / Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */
undef SIG_ATOMIC_T_SUFFIX
diff -urN cgminer-3.7.2.orig/configure cgminer-3.7.2/configure --- cgminer-3.7.2.orig/configure 2013-11-06 00:29:23.000000000 +1100 +++ cgminer-3.7.2/configure 2014-01-02 17:30:53.881239099 +1100 @@ -17333,6 +17333,11 @@ _ACEOF
+cat >>confdefs.h <<_ACEOF +#define SCRYPT_JANE_KERNNAME "scrypt-jane" +_ACEOF + +
diff -urN cgminer-3.7.2.orig/configure.ac cgminer-3.7.2/configure.ac --- cgminer-3.7.2.orig/configure.ac 2013-11-06 00:26:04.000000000 +1100 +++ cgminer-3.7.2/configure.ac 2014-01-02 17:30:53.889239262 +1100 @@ -481,6 +481,7 @@ AC_DEFINE_UNQUOTED([DIAKGCN_KERNNAME], ["diakgcn121016"], [Filename for diakgcn kernel]) AC_DEFINE_UNQUOTED([DIABLO_KERNNAME], ["diablo130302"], [Filename for diablo kernel]) AC_DEFINE_UNQUOTED([SCRYPT_KERNNAME], ["scrypt130511"], [Filename for scrypt kernel]) +AC_DEFINE_UNQUOTED([SCRYPT_JANE_KERNNAME], ["scrypt-jane"], [Filename for scrypt-jane kernel])
AC_SUBST(OPENCL_LIBS) diff -urN cgminer-3.7.2.orig/driver-opencl.c cgminer-3.7.2/driver-opencl.c --- cgminer-3.7.2.orig/driver-opencl.c 2013-10-08 23:35:01.000000000 +1100 +++ cgminer-3.7.2/driver-opencl.c 2014-01-02 17:30:53.897239423 +1100 @@ -34,6 +34,10 @@
include "adl.h"
include "util.h"
+#ifdef USE_SCRYPT +#include "scrypt-jane.h" /* sj_be32encvect / +#endif + /_ TODO: cleanup externals ****/
ifdef HAVE_CURSES
@@ -211,6 +215,8 @@
ifdef USE_SCRYPT
endif
return KL_NONE; } @@ -1067,6 +1073,7 @@ }
ifdef USE_SCRYPT
+ static cl_int queue_scrypt_kernel(_clState clState, dev_blk_ctx blk, __maybe_unused cl_uint threads) { unsigned char *midstate = blk->work->midstate; @@ -1074,9 +1081,26 @@ unsigned int num = 0; cl_uint le_target; cl_int status = 0;
}
le_target = (cl_uint )(blk->work->device_target + 28);
} + status = clEnqueueWriteBuffer(clState->commandQueue, clState->CLbuffer0, true, 0, 80, clState->cldata, 0, NULL,NULL);
CL_SET_ARG(clState->CLbuffer0); @@ -1085,6 +1109,8 @@ CL_SET_VARG(4, &midstate[0]); CL_SET_VARG(4, &midstate[16]); CL_SET_ARG(le_target);
return status; } @@ -1378,6 +1404,9 @@ case KL_SCRYPT: cgpu->kname = "scrypt"; break;
endif
@@ -1423,6 +1452,7 @@ break;
ifdef USE_SCRYPT
endif
@@ -1484,6 +1514,8 @@ int64_t hashes; int found = opt_scrypt ? SCRYPT_FOUND : FOUND; int buffersize = opt_scrypt ? SCRYPT_BUFFERSIZE : BUFFERSIZE;
uint32_t target;
/* Windows' timer resolution is only 15ms so oversample 5x / if (gpu->dynamic && (++gpu->intervals \ dynamic_us) > 70000) { @@ -1517,6 +1549,9 @@ size_t global_work_offset[1];
+ status = clEnqueueNDRangeKernel(clState->commandQueue, *kernel, 1, global_work_offset, globalThreads, localThreads, 0, NULL, NULL); } else @@ -1534,6 +1569,12 @@ return -1; }
} + /* The amount of work scanned can fluctuate when intensity changes
include "findnonce.h"
include "scrypt.h"
+#include "scrypt-jane.h"
const uint32_t SHA256_K[64] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, diff -urN cgminer-3.7.2.orig/Makefile.am cgminer-3.7.2/Makefile.am --- cgminer-3.7.2.orig/Makefile.am 2013-11-06 00:24:07.000000000 +1100 +++ cgminer-3.7.2/Makefile.am 2014-01-02 17:30:53.905239579 +1100 @@ -54,7 +54,7 @@ cgminer_SOURCES += *.cl
if HAS_SCRYPT -cgminer_SOURCES += scrypt.c scrypt.h +cgminer_SOURCES += scrypt.c scrypt.h scrypt-jane.c scrypt-jane.h endif
endif diff -urN cgminer-3.7.2.orig/Makefile.in cgminer-3.7.2/Makefile.in --- cgminer-3.7.2.orig/Makefile.in 2013-11-06 00:29:25.000000000 +1100 +++ cgminer-3.7.2/Makefile.in 2014-01-02 17:30:53.917239815 +1100 @@ -58,7 +58,7 @@ @HAS_OPENCL_TRUE@amappend_1 = driver-opencl.h driver-opencl.c ocl.c \ @HAS_OPENCL_TRUE@ ocl.h findnonce.c findnonce.h adl.c adl.h \ @HAS_OPENCL_TRUE@ adl_functions.h *.cl -@HAS_OPENCL_TRUE@@HAS_SCRYPT_TRUE@amappend_2 = scrypt.c scrypt.h +@HAS_OPENCL_TRUE@@HAS_SCRYPT_TRUE@amappend_2 = scrypt.c scrypt.h scrypt-jane.c scrypt-jane.h @NEED_FPGAUTILS_TRUE@am__append_3 = fpgautils.c fpgautils.h @WANT_USBUTILS_TRUE@amappend_4 = usbutils.c usbutils.h
@@ -110,18 +110,20 @@ bench_block.h util.c util.h uthash.h logging.h sha2.c sha2.h \ api.c logging.c driver-opencl.h driver-opencl.c ocl.c ocl.h \ findnonce.c findnonce.h adl.c adl.h adl_functions.h *.cl \
if test -f 'scrypt.c'; then $(CYGPATH_W) 'scrypt.c'; else $(CYGPATH_W) '$(srcdir)/scrypt.c'; fi
+cgminer-scrypt-jane.o: scrypt-jane.c +@amfastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cgminer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cgminer-scrypt-jane.o -MD -MP -MF $(DEPDIR)/cgminer-scrypt-jane.Tpo -c -o cgminer-scrypt-jane.o
test -f 'scrypt-jane.c' || echo '$(srcdir)/'
scrypt-jane.c +@amfastdepCC_TRUE@ $(AM_V_at)$(ammv) $(DEPDIR)/cgminer-scrypt-jane.Tpo $(DEPDIR)/cgminer-scrypt-jane.Po +@AMDEP_TRUE@@amfastdepCC_FALSE@ $(AM_V_CC)source='scrypt-jane.c' object='cgminer-scrypt-jane.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@amfastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@amfastdepCC_FALSE@ $(AM_V_CC@amnodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cgminer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cgminer-scrypt-jane.otest -f 'scrypt-jane.c' || echo '$(srcdir)/'
scrypt-jane.c + +cgminer-scrypt-jane.obj: scrypt-jane.c +@amfastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cgminer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cgminer-scrypt-jane.obj -MD -MP -MF $(DEPDIR)/cgminer-scrypt-jane.Tpo -c -o cgminer-scrypt-jane.objif test -f 'scrypt-jane.c'; then $(CYGPATH_W) 'scrypt-jane.c'; else $(CYGPATH_W) '$(srcdir)/scrypt-jane.c'; fi
+@amfastdepCC_TRUE@ $(AM_V_at)$(ammv) $(DEPDIR)/cgminer-scrypt-jane.Tpo $(DEPDIR)/cgminer-scrypt-jane.Po +@AMDEP_TRUE@@amfastdepCC_FALSE@ $(AM_V_CC)source='scrypt-jane.c' object='cgminer-scrypt-jane.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@amfastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@amfastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cgminer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cgminer-scrypt-jane.objif test -f 'scrypt-jane.c'; then $(CYGPATH_W) 'scrypt-jane.c'; else $(CYGPATH_W) '$(srcdir)/scrypt-jane.c'; fi
+ cgminer-fpgautils.o: fpgautils.c @amfastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cgminer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cgminer-fpgautils.o -MD -MP -MF $(DEPDIR)/cgminer-fpgautils.Tpo -c -o cgminer-fpgautils.otest -f 'fpgautils.c' || echo '$(srcdir)/'
fpgautils.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cgminer-fpgautils.Tpo $(DEPDIR)/cgminer-fpgautils.Po diff -urN cgminer-3.7.2.orig/miner.h cgminer-3.7.2/miner.h --- cgminer-3.7.2.orig/miner.h 2013-11-06 00:24:07.000000000 +1100 +++ cgminer-3.7.2/miner.h 2014-01-02 17:30:53.925239975 +1100 @@ -405,6 +405,7 @@ KL_DIAKGCN, KL_DIABLO, KL_SCRYPT,KL_SCRYPT_JANE, };
enum dev_reason { @@ -1089,6 +1090,11 @@ extern int opt_scantime; extern int opt_expiry;
+/* scrypt-jane */ +extern unsigned int sj_minNf; +extern unsigned int sj_maxNf; +extern unsigned int sj_startTime; +
ifdef USE_USBUTILS
extern pthread_mutex_t cgusb_lock; extern pthread_mutex_t cgusbres_lock; @@ -1171,6 +1177,7 @@ extern int gpu_threads;
ifdef USE_SCRYPT
extern bool opt_scrypt; +extern bool opt_scrypt_jane;
else
define opt_scrypt (0)
endif
@@ -1612,4 +1619,6 @@ extern struct api_data api_add_diff(struct api_data root, char name, double data, bool copy_data); extern struct api_data api_add_percent(struct api_data root, char name, double data, bool copy_data);
+extern unsigned char sj_GetNfactor(int nTimestamp); +
endif /* MINER_H */
diff -urN cgminer-3.7.2.orig/ocl.c cgminer-3.7.2/ocl.c --- cgminer-3.7.2.orig/ocl.c 2013-10-15 19:35:16.000000000 +1100 +++ cgminer-3.7.2/ocl.c 2014-01-02 17:30:53.933240131 +1100 @@ -392,7 +392,13 @@ if (cgpu->kernel == KL_NONE) { if (opt_scrypt) { applog(LOG_INFO, "Selecting scrypt kernel");
+// flip32(ohash, ohash); // Not needed for scrypt-chacha - mikaelh
define quarter(a,b,c,d) \
undef quarter
+} + + +/* returns a pointer to item i, where item is len sj_scrypt_mix_word_t's long / +static sj_scrypt_mix_word_t +sj_scrypt_item(sj_scrypt_mix_word_t *base, sj_scrypt_mix_word_t i, sj_scrypt_mix_word_t len) {
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
pragma unroll
+#if (LOOKUP_GAP == 1) +#elif (LOOKUP_GAP == 2)