" --cpu-affinity | Str | Locks to CPU devices, separate with comma | --cpu-affinity=1,2,3",
" --opencl-platforms | Str | OpenCL platforms to use, separate with comma | --opencl-platforms=2",
" -d, --opencl-devices | Str | OpenCL devices to use, separate with comma | -d 1",
- " --opencl-device-types | Str | OpenCL device-types to use, separate with comma | --opencl-device-type=1",
+ " -D, --opencl-device-types | Str | OpenCL device-types to use, separate with comma | -D 1",
" --opencl-vector-width | Num | Manual override OpenCL vector-width to X | --opencl-vector=4",
" -w, --workload-profile | Num | Enable a specific workload profile, see pool below | -w 3",
" -n, --kernel-accel | Num | Manual workload tuning, set outerloop step size to X | -n 64",
#define IDX_CPU_AFFINITY 0xff25
#define IDX_OPENCL_DEVICES 'd'
#define IDX_OPENCL_PLATFORMS 0xff72
- #define IDX_OPENCL_DEVICE_TYPES 0xff73
+ #define IDX_OPENCL_DEVICE_TYPES 'D'
#define IDX_OPENCL_VECTOR_WIDTH 0xff74
#define IDX_WORKLOAD_PROFILE 'w'
#define IDX_KERNEL_ACCEL 'n'
#define IDX_CUSTOM_CHARSET_3 '3'
#define IDX_CUSTOM_CHARSET_4 '4'
- char short_options[] = "hVvm:a:r:j:k:g:o:t:d:n:u:c:p:s:l:1:2:3:4:ibw:";
+ char short_options[] = "hVvm:a:r:j:k:g:o:t:d:D:n:u:c:p:s:l:1:2:3:4:ibw:";
struct option long_options[] =
{
char cpath[1024] = { 0 };
+ char build_opts[1024] = { 0 };
+
#if _WIN
snprintf (cpath, sizeof (cpath) - 1, "%s\\OpenCL\\", shared_dir);
- char cpath_real[MAX_PATH] = { 0 };
+ char *cpath_real = mymalloc (MAX_PATH);
+
+ if (GetFullPathName (cpath, MAX_PATH, cpath_real, NULL) == 0)
+ {
+ log_error ("ERROR: %s: %s", cpath, "GetFullPathName()");
+
+ return -1;
+ }
+
+ snprintf (build_opts, sizeof (build_opts) - 1, "-I \"%s\"", cpath_real);
- GetFullPathName (cpath, MAX_PATH, cpath_real, NULL);
+ myfree (cpath_real);
#else
snprintf (cpath, sizeof (cpath) - 1, "%s/OpenCL/", shared_dir);
- char *cpath_real = realpath (cpath, NULL);
+ char *cpath_real = mymalloc (PATH_MAX);
- #endif
+ if (realpath (cpath, cpath_real) == NULL)
+ {
+ log_error ("ERROR: %s: %s", cpath, strerror (errno));
+
+ return -1;
+ }
char cpath_escaped[1024] = { 0 };
- naive_escape (cpath_real, cpath_escaped);
+ naive_escape (cpath_real, cpath_escaped, sizeof (cpath_escaped));
+
+ myfree (cpath_real);
+
+ snprintf (build_opts, sizeof (build_opts) - 1, "-I %s", cpath_escaped);
+
+ #endif
// we don't have sm_* on vendors not NV but it doesn't matter
- char build_opts[1024] = { 0 };
+ char build_opts_new[1024] = { 0 };
- snprintf (build_opts, sizeof (build_opts) - 1, "-I %s -D VENDOR_ID=%u -D CUDA_ARCH=%d -D VECT_SIZE=%u -D DEVICE_TYPE=%u -D KERN_TYPE=%u -D _unroll -cl-std=CL1.1", cpath_escaped, device_param->device_vendor_id, (device_param->sm_major * 100) + device_param->sm_minor, device_param->vector_width, (u32) device_param->device_type, kern_type);
+ snprintf (build_opts_new, sizeof (build_opts_new) - 1, "%s -D VENDOR_ID=%u -D CUDA_ARCH=%d -D VECT_SIZE=%u -D DEVICE_TYPE=%u -D KERN_TYPE=%u -D _unroll -cl-std=CL1.1", build_opts, device_param->device_vendor_id, (device_param->sm_major * 100) + device_param->sm_minor, device_param->vector_width, (u32) device_param->device_type, kern_type);
+
+ strncpy (build_opts, build_opts_new, sizeof (build_opts));
#ifdef DEBUG
log_info ("- Device #%u: build_opts '%s'\n", device_id + 1, build_opts);
* create cracker threads
*/
+ if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
+
+ if (data.devices_status == STATUS_ABORTED) break;
+ if (data.devices_status == STATUS_QUIT) break;
+
data.devices_status = STATUS_RUNNING;
if (initial_restore_done == 0)