Changed phatk version to 2.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
diff --git a/findnonce.c b/findnonce.c
index 660971c..229b3e6 100644
--- a/findnonce.c
+++ b/findnonce.c
@@ -55,7 +55,7 @@ inline uint32_t ByteReverse(uint32_t value)
void precalc_hash(dev_blk_ctx *blk, uint32_t *state, uint32_t *data) {
cl_uint A, B, C, D, E, F, G, H;
-
+
A = state[0];
B = state[1];
C = state[2];
@@ -96,9 +96,19 @@ void precalc_hash(dev_blk_ctx *blk, uint32_t *state, uint32_t *data) {
blk->merkle = data[0];
blk->ntime = data[1];
blk->nbits = data[2];
-
+
blk->W16 = blk->fW0 = data[0] + (rotr(data[1], 7) ^ rotr(data[1], 18) ^ (data[1] >> 3));
blk->W17 = blk->fW1 = data[1] + (rotr(data[2], 7) ^ rotr(data[2], 18) ^ (data[2] >> 3)) + 0x01100000;
+ blk->PreVal4 = blk->fcty_e = E + (rotr(B, 6) ^ rotr(B, 11) ^ rotr(B, 25)) + (D ^ (B & (C ^ D))) + 0xe9b5dba5;
+ blk->T1 = blk->fcty_e2 = (rotr(F, 2) ^ rotr(F, 13) ^ rotr(F, 22)) + ((F & G) | (H & (F | G)));
+ blk->PreVal4_2 = blk->PreVal4 + blk->T1;
+ blk->PreVal0 = blk->PreVal4 + state[0];
+ blk->PreW31 = 0x00000280 + (rotr(blk->W16, 7) ^ rotr(blk->W16, 18) ^ (blk->W16 >> 3));
+ blk->PreW32 = blk->W16 + ((rotr(blk->W17, 7) ^ rotr(blk->W17, 18) ^ (blk->W17 >> 3)));
+ blk->PreW18 = data[2] + (rotr(blk->W16, 17) ^ rotr(blk->W16, 19) ^ (blk->W16 >> 10));
+ blk->PreW19 = 0x11002000 + (rotr(blk->W17, 17) ^ rotr(blk->W17, 19) ^ (blk->W17 >> 10));
+
+
blk->W2 = data[2];
blk->W2A = blk->W2 + (rotr(blk->W16, 19) ^ rotr(blk->W16, 17) ^ (blk->W16 >> 10));
@@ -109,9 +119,7 @@ void precalc_hash(dev_blk_ctx *blk, uint32_t *state, uint32_t *data) {
blk->fW15 = 0x00000280 + (rotr(blk->fW0, 7) ^ rotr(blk->fW0, 18) ^ (blk->fW0 >> 3));
blk->fW01r = blk->fW0 + (rotr(blk->fW1, 7) ^ rotr(blk->fW1, 18) ^ (blk->fW1 >> 3));
- blk->PreVal4 = blk->fcty_e = E + (rotr(B, 6) ^ rotr(B, 11) ^ rotr(B, 25)) + (D ^ (B & (C ^ D))) + 0xe9b5dba5;
- blk->T1 = blk->fcty_e2 = (rotr(F, 2) ^ rotr(F, 13) ^ rotr(F, 22)) + ((F & G) | (H & (F | G)));
-
+
blk->PreVal4addT1 = blk->PreVal4 + blk->T1;
blk->T1substate0 = state[0] - blk->T1;
}
diff --git a/main.c b/main.c
index 8f2a3ab..7f1165a 100644
--- a/main.c
+++ b/main.c
@@ -3411,7 +3411,7 @@ static cl_int queue_poclbm_kernel(_clState *clState, dev_blk_ctx *blk)
static cl_int queue_phatk_kernel(_clState *clState, dev_blk_ctx *blk)
{
- cl_kernel *kernel = &clState->kernel;
+ cl_kernel *kernel = &clState->kernel;
cl_int status = 0;
int num = 0;
@@ -3423,21 +3423,27 @@ static cl_int queue_phatk_kernel(_clState *clState, dev_blk_ctx *blk)
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->ctx_f);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->ctx_g);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->ctx_h);
+
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->cty_b);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->cty_c);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->C1addK5);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->D1A);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->cty_d);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->cty_f);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->cty_g);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->cty_h);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->nonce);
+
+ uint nonces[2];
+ nonces[0] = blk->nonce;
+ nonces[1] = (blk->nonce)+1;
+ status |= clSetKernelArg(*kernel, num++, 2 * sizeof(uint), (void *)nonces);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->W2A);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->W16);
status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->W17);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->W17_2);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreVal4addT1);
- status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->T1substate0);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreVal4_2);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreVal0);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreW18);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreW19);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreW31);
+ status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->PreW32);
status |= clSetKernelArg(*kernel, num++, sizeof(clState->outputBuffer),
(void *)&clState->outputBuffer);
diff --git a/miner.h b/miner.h
index 402ef9f..910693c 100644
--- a/miner.h
+++ b/miner.h
@@ -288,6 +288,12 @@ typedef struct {
cl_uint PreVal4; cl_uint T1;
cl_uint C1addK5; cl_uint D1A; cl_uint W2A; cl_uint W17_2;
cl_uint PreVal4addT1; cl_uint T1substate0;
+ cl_uint PreVal4_2;
+ cl_uint PreVal0;
+ cl_uint PreW18;
+ cl_uint PreW19;
+ cl_uint PreW31;
+ cl_uint PreW32;
} dev_blk_ctx;
#else
typedef struct {
diff --git a/ocl.c b/ocl.c
index 45f7095..15c2517 100644
--- a/ocl.c
+++ b/ocl.c
@@ -355,8 +355,8 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
break;
case KL_NONE: /* Shouldn't happen */
case KL_PHATK:
- strcpy(filename, "phatk110722.cl");
- strcpy(binaryfilename, "phatk110722");
+ strcpy(filename, "phatk2_2.cl");
+ strcpy(binaryfilename, "phatk2_2");
break;
}
@@ -501,7 +501,14 @@ build:
}
/* create a cl program executable for all the devices specified */
- status = clBuildProgram(clState->program, 1, &devices[gpu], NULL, NULL, NULL);
+ char CompilerOptions[256];
+ sprintf(CompilerOptions, "%s%i", "-DWORKSIZE=", clState->work_size);
+ //int n = 1000;
+ //while(n--)
+ // printf("%s", CompilerOptions);
+ //return 1;
+ status = clBuildProgram(clState->program, 1, &devices[gpu], CompilerOptions , NULL, NULL);
+
if (status != CL_SUCCESS)
{
applog(LOG_ERR, "Error: Building Program (clBuildProgram)");