Browse Source

--rawintensity option, by request of Dead2.

This setting allows to set the GPU intensity value directly without any modifiers, it does not
get any more raw than this! Look at the xintensity description raw for examples of regular
intensity values. You can also set this value through the ncurses interface by pressing:
G -> A -> select device id -> enter value.

Minor xintensity code cleanup as well.

Conflicts:
	driver-opencl.c
	miner.h
	sgminer.c
nfactor-troky
Martin Danielsen 11 years ago committed by Noel Maersk
parent
commit
d11df698d1
  1. 104
      driver-opencl.c
  2. 1
      driver-opencl.h
  3. 9
      miner.h
  4. 7
      sgminer.c

104
driver-opencl.c

@ -564,6 +564,7 @@ char *set_intensity(char *arg)
tt = &gpus[device].intensity; tt = &gpus[device].intensity;
*tt = val; *tt = val;
gpus[device].xintensity = 0; // Disable shader based intensity gpus[device].xintensity = 0; // Disable shader based intensity
gpus[device].rawintensity = 0; // Disable raw intensity
} }
device++; device++;
@ -580,6 +581,7 @@ char *set_intensity(char *arg)
tt = &gpus[device].intensity; tt = &gpus[device].intensity;
*tt = val; *tt = val;
gpus[device].xintensity = 0; // Disable shader based intensity gpus[device].xintensity = 0; // Disable shader based intensity
gpus[device].rawintensity = 0; // Disable raw intensity
} }
device++; device++;
} }
@ -588,6 +590,7 @@ char *set_intensity(char *arg)
gpus[i].dynamic = gpus[0].dynamic; gpus[i].dynamic = gpus[0].dynamic;
gpus[i].intensity = gpus[0].intensity; gpus[i].intensity = gpus[0].intensity;
gpus[i].xintensity = 0; // Disable shader based intensity gpus[i].xintensity = 0; // Disable shader based intensity
gpus[i].rawintensity = 0; // Disable raw intensity
} }
} }
@ -604,10 +607,11 @@ char *set_xintensity(char *arg)
return "Invalid parameters for shader based intensity"; return "Invalid parameters for shader based intensity";
val = atoi(nextptr); val = atoi(nextptr);
if (val < MIN_XINTENSITY || val > MAX_XINTENSITY) if (val < MIN_XINTENSITY || val > MAX_XINTENSITY)
return "Invalid value passed to set shader intensity"; return "Invalid value passed to set shader-based intensity";
gpus[device].dynamic = false; // Disable dynamic intensity gpus[device].dynamic = false; // Disable dynamic intensity
gpus[device].intensity = 0; // Disable regular intensity gpus[device].intensity = 0; // Disable regular intensity
gpus[device].rawintensity = 0; // Disable raw intensity
gpus[device].xintensity = val; gpus[device].xintensity = val;
device++; device++;
@ -617,13 +621,54 @@ char *set_xintensity(char *arg)
return "Invalid value passed to set shader based intensity"; return "Invalid value passed to set shader based intensity";
gpus[device].dynamic = false; // Disable dynamic intensity gpus[device].dynamic = false; // Disable dynamic intensity
gpus[device].intensity = 0; // Disable regular intensity gpus[device].intensity = 0; // Disable regular intensity
gpus[device].rawintensity = 0; // Disable raw intensity
gpus[device].xintensity = val; gpus[device].xintensity = val;
device++; device++;
} }
if (device == 1) if (device == 1)
for (i = device; i < MAX_GPUDEVICES; i++) { for (i = device; i < MAX_GPUDEVICES; i++) {
gpus[i].dynamic = gpus[0].dynamic; // Disable dynamic intensity gpus[i].dynamic = gpus[0].dynamic;
gpus[i].intensity = gpus[0].intensity; // Disable regular intensity gpus[i].intensity = gpus[0].intensity;
gpus[i].rawintensity = gpus[0].rawintensity;
gpus[i].xintensity = gpus[0].xintensity;
}
return NULL;
}
char *set_rawintensity(char *arg)
{
int i, device = 0, val = 0;
char *nextptr;
nextptr = strtok(arg, ",");
if (nextptr == NULL)
return "Invalid parameters for raw intensity";
val = atoi(nextptr);
if (val < MIN_RAWINTENSITY || val > MAX_RAWINTENSITY)
return "Invalid value passed to set raw intensity";
gpus[device].dynamic = false; // Disable dynamic intensity
gpus[device].intensity = 0; // Disable regular intensity
gpus[device].xintensity = 0; // Disable xintensity
gpus[device].rawintensity = val;
device++;
while ((nextptr = strtok(NULL, ",")) != NULL) {
val = atoi(nextptr);
if (val < MIN_RAWINTENSITY || val > MAX_RAWINTENSITY)
return "Invalid value passed to set raw intensity";
gpus[device].dynamic = false; // Disable dynamic intensity
gpus[device].intensity = 0; // Disable regular intensity
gpus[device].xintensity = 0; // Disable xintensity
gpus[device].rawintensity = val;
device++;
}
if (device == 1)
for (i = device; i < MAX_GPUDEVICES; i++) {
gpus[i].dynamic = gpus[0].dynamic;
gpus[i].intensity = gpus[0].intensity;
gpus[i].rawintensity = gpus[0].rawintensity;
gpus[i].xintensity = gpus[0].xintensity; gpus[i].xintensity = gpus[0].xintensity;
} }
@ -693,10 +738,10 @@ retry: // TODO: refactor
mhash_base = false; mhash_base = false;
} }
wlog("GPU %d: %.1f / %.1f %sh/s | A:%d R:%d HW:%d U:%.2f/m I:%d xI:%d\n", wlog("GPU %d: %.1f / %.1f %sh/s | A:%d R:%d HW:%d U:%.2f/m I:%d xI:%d rI:%d\n",
gpu, displayed_rolling, displayed_total, mhash_base ? "M" : "K", gpu, displayed_rolling, displayed_total, mhash_base ? "M" : "K",
cgpu->accepted, cgpu->rejected, cgpu->hw_errors, cgpu->accepted, cgpu->rejected, cgpu->hw_errors,
cgpu->utility, cgpu->intensity, cgpu->xintensity); cgpu->utility, cgpu->intensity, cgpu->xintensity, cgpu->rawintensity);
#ifdef HAVE_ADL #ifdef HAVE_ADL
if (gpus[gpu].has_adl) { if (gpus[gpu].has_adl) {
int engineclock = 0, memclock = 0, activity = 0, fanspeed = 0, fanpercent = 0, powertune = 0; int engineclock = 0, memclock = 0, activity = 0, fanspeed = 0, fanpercent = 0, powertune = 0;
@ -764,7 +809,7 @@ retry: // TODO: refactor
wlog("\n"); wlog("\n");
} }
wlogprint("[E]nable [D]isable [I]ntensity [x]Intensity [R]estart GPU %s\n",adl_active ? "[C]hange settings" : ""); wlogprint("[E]nable [D]isable [I]ntensity [x]Intensity R[a]w Intensity [R]estart GPU %s\n",adl_active ? "[C]hange settings" : "");
wlogprint("Or press any other key to continue\n"); wlogprint("Or press any other key to continue\n");
logwin_update(); logwin_update();
@ -850,7 +895,8 @@ retry: // TODO: refactor
} }
gpus[selected].dynamic = false; gpus[selected].dynamic = false;
gpus[selected].intensity = intensity; gpus[selected].intensity = intensity;
gpus[selected].xintensity = 0; // disable gpus[selected].xintensity = 0; // Disable xintensity when enabling intensity
gpus[selected].rawintensity = 0; // Disable raw intensity when enabling intensity
wlogprint("Intensity on gpu %d set to %d\n", selected, intensity); wlogprint("Intensity on gpu %d set to %d\n", selected, intensity);
pause_dynamic_threads(selected); pause_dynamic_threads(selected);
goto retry; goto retry;
@ -877,11 +923,41 @@ retry: // TODO: refactor
goto retry; goto retry;
} }
gpus[selected].dynamic = false; gpus[selected].dynamic = false;
gpus[selected].intensity = 0; // disable gpus[selected].intensity = 0; // Disable intensity when enabling xintensity
gpus[selected].rawintensity = 0; // Disable raw intensity when enabling xintensity
gpus[selected].xintensity = xintensity; gpus[selected].xintensity = xintensity;
wlogprint("Experimental intensity on gpu %d set to %d\n", selected, xintensity); wlogprint("Experimental intensity on gpu %d set to %d\n", selected, xintensity);
pause_dynamic_threads(selected); pause_dynamic_threads(selected);
goto retry; goto retry;
} else if (!strncasecmp(&input, "a", 1)) {
int rawintensity;
char *intvar;
if (selected)
selected = curses_int("Select GPU to change raw intensity on");
if (selected < 0 || selected >= nDevs) {
wlogprint("Invalid selection\n");
goto retry;
}
intvar = curses_input("Set raw GPU scan intensity (" MIN_RAWINTENSITY_STR " -> " MAX_RAWINTENSITY_STR ")");
if (!intvar) {
wlogprint("Invalid input\n");
goto retry;
}
rawintensity = atoi(intvar);
free(intvar);
if (rawintensity < MIN_RAWINTENSITY || rawintensity > MAX_RAWINTENSITY) {
wlogprint("Invalid selection\n");
goto retry;
}
gpus[selected].dynamic = false;
gpus[selected].intensity = 0; // Disable intensity when enabling raw intensity
gpus[selected].xintensity = 0; // Disable xintensity when enabling raw intensity
gpus[selected].rawintensity = rawintensity;
wlogprint("Raw intensity on gpu %d set to %d\n", selected, rawintensity);
pause_dynamic_threads(selected);
goto retry;
} else if (!strncasecmp(&input, "r", 1)) { } else if (!strncasecmp(&input, "r", 1)) {
if (selected) if (selected)
selected = curses_int("Select GPU to attempt to restart"); selected = curses_int("Select GPU to attempt to restart");
@ -942,11 +1018,13 @@ static cl_int queue_scrypt_kernel(_clState *clState, dev_blk_ctx *blk, __maybe_u
} }
static void set_threads_hashes(unsigned int vectors, unsigned int compute_shaders, int64_t *hashes, size_t *globalThreads, static void set_threads_hashes(unsigned int vectors, unsigned int compute_shaders, int64_t *hashes, size_t *globalThreads,
unsigned int minthreads, __maybe_unused int *intensity, __maybe_unused int *xintensity) unsigned int minthreads, __maybe_unused int *intensity, __maybe_unused int *xintensity, __maybe_unused int *rawintensity)
{ {
unsigned int threads = 0; unsigned int threads = 0;
while (threads < minthreads) { while (threads < minthreads) {
if (*xintensity > 0) { if (*rawintensity > 0) {
threads = *rawintensity;
} else if (*xintensity > 0) {
threads = compute_shaders * *xintensity; threads = compute_shaders * *xintensity;
} else { } else {
threads = 1 << *intensity; threads = 1 << *intensity;
@ -1145,7 +1223,9 @@ static void get_opencl_statline_before(char *buf, size_t bufsiz, struct cgpu_inf
static void get_opencl_statline(char *buf, size_t bufsiz, struct cgpu_info *gpu) static void get_opencl_statline(char *buf, size_t bufsiz, struct cgpu_info *gpu)
{ {
if (gpu->xintensity > 0) if (gpu->rawintensity > 0)
tailsprintf(buf, bufsiz, " rI:%3d", gpu->rawintensity);
else if (gpu->xintensity > 0)
tailsprintf(buf, bufsiz, " xI:%3d", gpu->xintensity); tailsprintf(buf, bufsiz, " xI:%3d", gpu->xintensity);
else else
tailsprintf(buf, bufsiz, " I:%2d", gpu->intensity); tailsprintf(buf, bufsiz, " I:%2d", gpu->intensity);
@ -1314,7 +1394,7 @@ static int64_t opencl_scanhash(struct thr_info *thr, struct work *work,
gpu->intervals = 0; gpu->intervals = 0;
} }
set_threads_hashes(clState->vwidth, clState->compute_shaders, &hashes, globalThreads, localThreads[0], &gpu->intensity, &gpu->xintensity); set_threads_hashes(clState->vwidth, clState->compute_shaders, &hashes, globalThreads, localThreads[0], &gpu->intensity, &gpu->xintensity, &gpu->rawintensity);
if (hashes > gpu->max_hashes) if (hashes > gpu->max_hashes)
gpu->max_hashes = hashes; gpu->max_hashes = hashes;

1
driver-opencl.h

@ -18,6 +18,7 @@ extern char *set_temp_overheat(char *arg);
extern char *set_temp_target(char *arg); extern char *set_temp_target(char *arg);
extern char *set_intensity(char *arg); extern char *set_intensity(char *arg);
extern char *set_xintensity(char *arg); extern char *set_xintensity(char *arg);
extern char *set_rawintensity(char *arg);
extern char *set_vector(char *arg); extern char *set_vector(char *arg);
extern char *set_worksize(char *arg); extern char *set_worksize(char *arg);
extern char *set_shaders(char *arg); extern char *set_shaders(char *arg);

9
miner.h

@ -465,6 +465,7 @@ struct cgpu_info {
int virtual_adl; int virtual_adl;
int intensity; int intensity;
int xintensity; int xintensity;
int rawintensity;
bool dynamic; bool dynamic;
cl_uint vwidth; cl_uint vwidth;
@ -1052,8 +1053,12 @@ extern bool add_pool_details(struct pool *pool, bool live, char *url, char *user
#define MAX_INTENSITY_STR "31" #define MAX_INTENSITY_STR "31"
#define MIN_XINTENSITY 1 #define MIN_XINTENSITY 1
#define MIN_XINTENSITY_STR "1" #define MIN_XINTENSITY_STR "1"
#define MAX_XINTENSITY 999 #define MAX_XINTENSITY 9999
#define MAX_XINTENSITY_STR "999" #define MAX_XINTENSITY_STR "9999"
#define MIN_RAWINTENSITY 1
#define MIN_RAWINTENSITY_STR "1"
#define MAX_RAWINTENSITY 2147483647
#define MAX_RAWINTENSITY_STR "2147483647"
extern bool hotplug_mode; extern bool hotplug_mode;
extern int hotplug_time; extern int hotplug_time;

7
sgminer.c

@ -1089,7 +1089,12 @@ static struct opt_table opt_config_table[] = {
",default: d to maintain desktop interactivity)"), ",default: d to maintain desktop interactivity)"),
OPT_WITH_ARG("--xintensity|-X", OPT_WITH_ARG("--xintensity|-X",
set_xintensity, NULL, NULL, set_xintensity, NULL, NULL,
"Shader based intensity of GPU scanning (0 to 9999), overrides --intensity|-I."), "Shader based intensity of GPU scanning (" MIN_XINTENSITY_STR " to "
MAX_XINTENSITY_STR "), overrides --intensity|-I and -rawintensity."),
OPT_WITH_ARG("--rawintensity",
set_rawintensity, NULL, NULL,
"Raw intensity of GPU scanning (" MIN_RAWINTENSITY_STR " to "
MAX_RAWINTENSITY_STR "), overrides --intensity|-I and --xintensity|-X."),
OPT_WITH_ARG("--kernel-path|-K", OPT_WITH_ARG("--kernel-path|-K",
opt_set_charp, opt_show_charp, &opt_kernel_path, opt_set_charp, opt_show_charp, &opt_kernel_path,
"Specify a path to where kernel files are"), "Specify a path to where kernel files are"),

Loading…
Cancel
Save