|
|
@ -885,6 +885,623 @@ char *display_devs(int *ndevs) |
|
|
|
exit(*ndevs); |
|
|
|
exit(*ndevs); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_vector(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set vector"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val != 1 && val != 2 && val != 4) |
|
|
|
|
|
|
|
return "Invalid value passed to set_vector"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].vwidth = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val != 1 && val != 2 && val != 4) |
|
|
|
|
|
|
|
return "Invalid value passed to set_vector"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].vwidth = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].vwidth = gpus[0].vwidth; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_worksize(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set work size"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 1 || val > 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_worksize"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].work_size = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 1 || val > 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_worksize"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].work_size = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].work_size = gpus[0].work_size; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_shaders(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set lookup gap"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].shaders = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].shaders = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].shaders = gpus[0].shaders; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_lookup_gap(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set lookup gap"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].opt_lg = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].opt_lg = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].opt_lg = gpus[0].opt_lg; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_thread_concurrency(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set thread concurrency"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].opt_tc = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].opt_tc = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].opt_tc = gpus[0].opt_tc; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_kernel(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
int i, device = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set kernel"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (gpus[device].kernelname != NULL) |
|
|
|
|
|
|
|
free(gpus[device].kernelname); |
|
|
|
|
|
|
|
gpus[device].kernelname = strdup(nextptr); |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
if (gpus[device].kernelname != NULL) |
|
|
|
|
|
|
|
free(gpus[device].kernelname); |
|
|
|
|
|
|
|
gpus[device].kernelname = strdup(nextptr); |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* If only one kernel name provided, use same for all GPUs. */ |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) { |
|
|
|
|
|
|
|
if (gpus[i].kernelname != NULL) |
|
|
|
|
|
|
|
free(gpus[i].kernelname); |
|
|
|
|
|
|
|
gpus[i].kernelname = strdup(gpus[0].kernelname); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef HAVE_ADL |
|
|
|
|
|
|
|
/* This function allows us to map an adl device to an opencl device for when
|
|
|
|
|
|
|
|
* simple enumeration has failed to match them. */ |
|
|
|
|
|
|
|
char *set_gpu_map(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int val1 = 0, val2 = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu map"; |
|
|
|
|
|
|
|
if (sscanf(arg, "%d:%d", &val1, &val2) != 2) |
|
|
|
|
|
|
|
return "Invalid description for map pair"; |
|
|
|
|
|
|
|
if (val1 < 0 || val1 > MAX_GPUDEVICES || val2 < 0 || val2 > MAX_GPUDEVICES) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_map"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[val1].virtual_adl = val2; |
|
|
|
|
|
|
|
gpus[val1].mapped = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
if (sscanf(nextptr, "%d:%d", &val1, &val2) != 2) |
|
|
|
|
|
|
|
return "Invalid description for map pair"; |
|
|
|
|
|
|
|
if (val1 < 0 || val1 > MAX_GPUDEVICES || val2 < 0 || val2 > MAX_GPUDEVICES) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_map"; |
|
|
|
|
|
|
|
gpus[val1].virtual_adl = val2; |
|
|
|
|
|
|
|
gpus[val1].mapped = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_threads(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 1, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set_gpu_threads"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 1 || val > 10) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_threads"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].threads = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 1 || val > 10) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_threads"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].threads = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].threads = gpus[0].threads; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_engine(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val1 = 0, val2 = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu engine"; |
|
|
|
|
|
|
|
get_intrange(nextptr, &val1, &val2); |
|
|
|
|
|
|
|
if (val1 < 0 || val1 > 9999 || val2 < 0 || val2 > 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_engine"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device].min_engine = val1; |
|
|
|
|
|
|
|
gpus[device].gpu_engine = val2; |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
get_intrange(nextptr, &val1, &val2); |
|
|
|
|
|
|
|
if (val1 < 0 || val1 > 9999 || val2 < 0 || val2 > 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_engine"; |
|
|
|
|
|
|
|
gpus[device].min_engine = val1; |
|
|
|
|
|
|
|
gpus[device].gpu_engine = val2; |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = 1; i < MAX_GPUDEVICES; i++) { |
|
|
|
|
|
|
|
gpus[i].min_engine = gpus[0].min_engine; |
|
|
|
|
|
|
|
gpus[i].gpu_engine = gpus[0].gpu_engine; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_fan(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val1 = 0, val2 = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu fan"; |
|
|
|
|
|
|
|
get_intrange(nextptr, &val1, &val2); |
|
|
|
|
|
|
|
if (val1 < 0 || val1 > 100 || val2 < 0 || val2 > 100) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_fan"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device].min_fan = val1; |
|
|
|
|
|
|
|
gpus[device].gpu_fan = val2; |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
get_intrange(nextptr, &val1, &val2); |
|
|
|
|
|
|
|
if (val1 < 0 || val1 > 100 || val2 < 0 || val2 > 100) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_fan"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device].min_fan = val1; |
|
|
|
|
|
|
|
gpus[device].gpu_fan = val2; |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = 1; i < MAX_GPUDEVICES; i++) { |
|
|
|
|
|
|
|
gpus[i].min_fan = gpus[0].min_fan; |
|
|
|
|
|
|
|
gpus[i].gpu_fan = gpus[0].gpu_fan; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_memclock(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu memclock"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val >= 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_memclock"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_memclock = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val >= 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_memclock"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_memclock = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].gpu_memclock = gpus[0].gpu_memclock; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_memdiff(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu memdiff"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < -9999 || val > 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_memdiff"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_memdiff = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < -9999 || val > 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_memdiff"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_memdiff = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].gpu_memdiff = gpus[0].gpu_memdiff; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_powertune(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu powertune"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < -99 || val > 99) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_powertune"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_powertune = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < -99 || val > 99) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_powertune"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_powertune = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].gpu_powertune = gpus[0].gpu_powertune; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_gpu_vddc(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, device = 0; |
|
|
|
|
|
|
|
float val = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set gpu vddc"; |
|
|
|
|
|
|
|
val = atof(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val >= 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_vddc"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_vddc = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atof(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val >= 9999) |
|
|
|
|
|
|
|
return "Invalid value passed to set_gpu_vddc"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device++].gpu_vddc = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) |
|
|
|
|
|
|
|
gpus[i].gpu_vddc = gpus[0].gpu_vddc; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_temp_overheat(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0, *to; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set temp overheat"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val > 200) |
|
|
|
|
|
|
|
return "Invalid value passed to set temp overheat"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
to = &gpus[device++].adl.overtemp; |
|
|
|
|
|
|
|
*to = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val > 200) |
|
|
|
|
|
|
|
return "Invalid value passed to set temp overheat"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
to = &gpus[device++].adl.overtemp; |
|
|
|
|
|
|
|
*to = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) { |
|
|
|
|
|
|
|
to = &gpus[i].adl.overtemp; |
|
|
|
|
|
|
|
*to = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_temp_target(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, val = 0, device = 0, *tt; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set temp target"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val > 200) |
|
|
|
|
|
|
|
return "Invalid value passed to set temp target"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tt = &gpus[device++].adl.targettemp; |
|
|
|
|
|
|
|
*tt = val; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val < 0 || val > 200) |
|
|
|
|
|
|
|
return "Invalid value passed to set temp target"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tt = &gpus[device++].adl.targettemp; |
|
|
|
|
|
|
|
*tt = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (device == 1) { |
|
|
|
|
|
|
|
for (i = device; i < MAX_GPUDEVICES; i++) { |
|
|
|
|
|
|
|
tt = &gpus[i].adl.targettemp; |
|
|
|
|
|
|
|
*tt = val; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_intensity(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, device = 0, *tt; |
|
|
|
|
|
|
|
char *nextptr, val = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for set intensity"; |
|
|
|
|
|
|
|
if (!strncasecmp(nextptr, "d", 1)) |
|
|
|
|
|
|
|
gpus[device].dynamic = true; |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
gpus[device].dynamic = false; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val == 0) return "disabled"; |
|
|
|
|
|
|
|
if (val < MIN_INTENSITY || val > MAX_INTENSITY) |
|
|
|
|
|
|
|
return "Invalid value passed to set intensity"; |
|
|
|
|
|
|
|
tt = &gpus[device].intensity; |
|
|
|
|
|
|
|
*tt = val; |
|
|
|
|
|
|
|
gpus[device].xintensity = 0; // Disable shader based intensity
|
|
|
|
|
|
|
|
gpus[device].rawintensity = 0; // Disable raw intensity
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
if (!strncasecmp(nextptr, "d", 1)) |
|
|
|
|
|
|
|
gpus[device].dynamic = true; |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
gpus[device].dynamic = false; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val == 0) return "disabled"; |
|
|
|
|
|
|
|
if (val < MIN_INTENSITY || val > MAX_INTENSITY) |
|
|
|
|
|
|
|
return "Invalid value passed to set intensity"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tt = &gpus[device].intensity; |
|
|
|
|
|
|
|
*tt = val; |
|
|
|
|
|
|
|
gpus[device].xintensity = 0; // Disable shader based intensity
|
|
|
|
|
|
|
|
gpus[device].rawintensity = 0; // Disable raw intensity
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
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].xintensity = 0; // Disable shader based intensity
|
|
|
|
|
|
|
|
gpus[i].rawintensity = 0; // Disable raw intensity
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_xintensity(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int i, device = 0, val = 0; |
|
|
|
|
|
|
|
char *nextptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nextptr = strtok(arg, ","); |
|
|
|
|
|
|
|
if (nextptr == NULL) |
|
|
|
|
|
|
|
return "Invalid parameters for shader based intensity"; |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val == 0) return "disabled"; |
|
|
|
|
|
|
|
if (val < MIN_XINTENSITY || val > MAX_XINTENSITY) |
|
|
|
|
|
|
|
return "Invalid value passed to set shader-based intensity"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gpus[device].dynamic = false; // Disable dynamic intensity
|
|
|
|
|
|
|
|
gpus[device].intensity = 0; // Disable regular intensity
|
|
|
|
|
|
|
|
gpus[device].rawintensity = 0; // Disable raw intensity
|
|
|
|
|
|
|
|
gpus[device].xintensity = val; |
|
|
|
|
|
|
|
device++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((nextptr = strtok(NULL, ",")) != NULL) { |
|
|
|
|
|
|
|
val = atoi(nextptr); |
|
|
|
|
|
|
|
if (val == 0) return "disabled"; |
|
|
|
|
|
|
|
if (val < MIN_XINTENSITY || val > MAX_XINTENSITY) |
|
|
|
|
|
|
|
return "Invalid value passed to set shader based intensity"; |
|
|
|
|
|
|
|
gpus[device].dynamic = false; // Disable dynamic intensity
|
|
|
|
|
|
|
|
gpus[device].intensity = 0; // Disable regular intensity
|
|
|
|
|
|
|
|
gpus[device].rawintensity = 0; // Disable raw intensity
|
|
|
|
|
|
|
|
gpus[device].xintensity = 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; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 == 0) return "disabled"; |
|
|
|
|
|
|
|
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 == 0) return "disabled"; |
|
|
|
|
|
|
|
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; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* These options are available from config file or commandline */ |
|
|
|
/* These options are available from config file or commandline */ |
|
|
|
static struct opt_table opt_config_table[] = { |
|
|
|
static struct opt_table opt_config_table[] = { |
|
|
|
OPT_WITH_ARG("--algorithm", |
|
|
|
OPT_WITH_ARG("--algorithm", |
|
|
|