Browse Source

keccak: Adapt opencl intensity interpretation to have approximately the same desktop interactivity affect as SHA256d

Luke Dashjr 11 years ago
parent
commit
80b2aa7e2d
2 changed files with 18 additions and 6 deletions
  1. 16 6
      malgo/keccak.c
  2. 2 0
      malgo/sha256d.c

+ 16 - 6
malgo/keccak.c

@@ -12,6 +12,7 @@
 #include "config.h"
 #include "miner.h"
 
+#include <math.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
@@ -330,8 +331,17 @@ void keccak_hash_data(void * const digest, const void * const pdata)
 }
 
 #ifdef USE_OPENCL
-extern float opencl_oclthreads_to_intensity_sha256d(unsigned long oclthreads);
-extern unsigned long opencl_intensity_to_oclthreads_sha256d(float intensity);
+static
+float opencl_oclthreads_to_intensity_keccak(const unsigned long oclthreads)
+{
+	return log2f(oclthreads) - 13.;
+}
+
+static
+unsigned long opencl_intensity_to_oclthreads_keccak(float intensity)
+{
+	return powf(2, intensity + 13);
+}
 
 static
 char *opencl_get_default_kernel_file_keccak(const struct mining_algorithm * const malgo, struct cgpu_info * const cgpu, struct _clState * const clState)
@@ -352,10 +362,10 @@ static struct mining_algorithm malgo_keccak = {
 	.hash_data_f = keccak_hash_data,
 	
 #ifdef USE_OPENCL
-	.opencl_oclthreads_to_intensity = opencl_oclthreads_to_intensity_sha256d,
-	.opencl_intensity_to_oclthreads = opencl_intensity_to_oclthreads_sha256d,
-	.opencl_min_oclthreads =       0x20,  // intensity -10
-	.opencl_max_oclthreads = 0x20000000,  // intensity  14
+	.opencl_oclthreads_to_intensity = opencl_oclthreads_to_intensity_keccak,
+	.opencl_intensity_to_oclthreads = opencl_intensity_to_oclthreads_keccak,
+	.opencl_min_oclthreads =       0x20,  // intensity -8
+	.opencl_max_oclthreads = 0x20000000,  // intensity 16
 	.opencl_min_nonce_diff = 1./0x10,
 	.opencl_get_default_kernel_file = opencl_get_default_kernel_file_keccak,
 #endif

+ 2 - 0
malgo/sha256d.c

@@ -32,11 +32,13 @@ void hash_data(void *out_hash, const void *data)
 }
 
 #ifdef USE_OPENCL
+static
 float opencl_oclthreads_to_intensity_sha256d(const unsigned long oclthreads)
 {
 	return log2f(oclthreads) - 15.;
 }
 
+static
 unsigned long opencl_intensity_to_oclthreads_sha256d(float intensity)
 {
 	return powf(2, intensity + 15);