Browse Source

improve the device mapping and a possible segfault

when using -n, work_restart array was not allocated
master
Tanguy Pruvot 9 years ago
parent
commit
be73cd1ae0
  1. 5
      README.txt
  2. 2
      ccminer.cpp
  3. 2
      configure.ac
  4. 6
      cpuminer-config.h
  5. 25
      cuda.cpp
  6. 3
      scrypt-jane.cpp
  7. 3
      scrypt.cpp

5
README.txt

@ -1,5 +1,5 @@
ccMiner release 1.7.0 (Nov 2015) "Mining Diff & basic MultiAlgo" ccMiner release 1.7.1 (Dec 2015) "Mining Diff & basic MultiAlgo"
--------------------------------------------------------------- ---------------------------------------------------------------
*************************************************************** ***************************************************************
@ -231,6 +231,9 @@ features.
>>> RELEASE HISTORY <<< >>> RELEASE HISTORY <<<
Dec. 03th 2015 v1.7.1
Small bug fixes about device ids mapping (and vendor names)
Nov. 06th 2015 v1.7 Nov. 06th 2015 v1.7
Improve old devices compatibility (x11, lyra2v2, quark, qubit...) Improve old devices compatibility (x11, lyra2v2, quark, qubit...)
Add windows support for SM 2.1 and drop SM 3.5 (x86) Add windows support for SM 2.1 and drop SM 3.5 (x86)

2
ccminer.cpp

@ -1415,7 +1415,7 @@ void restart_threads(void)
if (opt_debug && !opt_quiet) if (opt_debug && !opt_quiet)
applog(LOG_DEBUG,"%s", __FUNCTION__); applog(LOG_DEBUG,"%s", __FUNCTION__);
for (int i = 0; i < opt_n_threads; i++) for (int i = 0; i < opt_n_threads && work_restart; i++)
work_restart[i].restart = 1; work_restart[i].restart = 1;
} }

2
configure.ac

@ -1,4 +1,4 @@
AC_INIT([ccminer], [1.7]) AC_INIT([ccminer], [1.7.1])
AC_PREREQ([2.59c]) AC_PREREQ([2.59c])
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM

6
cpuminer-config.h

@ -162,7 +162,7 @@
#define PACKAGE_NAME "ccminer" #define PACKAGE_NAME "ccminer"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "ccminer 1.7" #define PACKAGE_STRING "ccminer 1.7.1"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "ccminer" #define PACKAGE_TARNAME "ccminer"
@ -171,7 +171,7 @@
#define PACKAGE_URL "http://github.com/tpruvot/ccminer" #define PACKAGE_URL "http://github.com/tpruvot/ccminer"
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "1.7" #define PACKAGE_VERSION "1.7.1"
/* If using the C implementation of alloca, define if you know the /* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be direction of stack growth for your system; otherwise it will be
@ -185,7 +185,7 @@
#define STDC_HEADERS 1 #define STDC_HEADERS 1
/* Version number of package */ /* Version number of package */
#define VERSION "1.7" #define VERSION "1.7.1"
/* Define curl_free() as free() if our version of curl lacks curl_free. */ /* Define curl_free() as free() if our version of curl lacks curl_free. */
/* #undef curl_free */ /* #undef curl_free */

25
cuda.cpp

@ -68,25 +68,26 @@ void cuda_devicenames()
for (int i=0; i < GPU_N; i++) for (int i=0; i < GPU_N; i++)
{ {
char vendorname[32] = { 0 }; char vendorname[32] = { 0 };
int dev_id = device_map[i];
cudaDeviceProp props; cudaDeviceProp props;
cudaGetDeviceProperties(&props, device_map[i]); cudaGetDeviceProperties(&props, dev_id);
device_sm[i] = (props.major * 100 + props.minor * 10); device_sm[dev_id] = (props.major * 100 + props.minor * 10);
if (device_name[i]) { if (device_name[dev_id]) {
free(device_name[i]); free(device_name[dev_id]);
device_name[i] = NULL; device_name[dev_id] = NULL;
} }
#ifdef USE_WRAPNVML #ifdef USE_WRAPNVML
if (gpu_vendor((uint8_t)props.pciBusID, vendorname) > 0 && strlen(vendorname)) { if (gpu_vendor((uint8_t)props.pciBusID, vendorname) > 0 && strlen(vendorname)) {
device_name[i] = (char*) calloc(1, strlen(vendorname) + strlen(props.name) + 2); device_name[dev_id] = (char*) calloc(1, strlen(vendorname) + strlen(props.name) + 2);
if (!strncmp(props.name, "GeForce ", 8)) if (!strncmp(props.name, "GeForce ", 8))
sprintf(device_name[i], "%s %s", vendorname, &props.name[8]); sprintf(device_name[dev_id], "%s %s", vendorname, &props.name[8]);
else else
sprintf(device_name[i], "%s %s", vendorname, props.name); sprintf(device_name[dev_id], "%s %s", vendorname, props.name);
} else } else
#endif #endif
device_name[i] = strdup(props.name); device_name[dev_id] = strdup(props.name);
} }
} }
@ -95,11 +96,11 @@ void cuda_print_devices()
int ngpus = cuda_num_devices(); int ngpus = cuda_num_devices();
cuda_devicenames(); cuda_devicenames();
for (int n=0; n < ngpus; n++) { for (int n=0; n < ngpus; n++) {
int m = device_map[n % MAX_GPUS]; int dev_id = device_map[n % MAX_GPUS];
cudaDeviceProp props; cudaDeviceProp props;
cudaGetDeviceProperties(&props, m); cudaGetDeviceProperties(&props, dev_id);
if (!opt_n_threads || n < opt_n_threads) { if (!opt_n_threads || n < opt_n_threads) {
fprintf(stderr, "GPU #%d: SM %d.%d %s\n", m, props.major, props.minor, device_name[n]); fprintf(stderr, "GPU #%d: SM %d.%d %s\n", dev_id, props.major, props.minor, device_name[dev_id]);
} }
} }
} }

3
scrypt-jane.cpp

@ -638,8 +638,7 @@ int scanhash_scrypt_jane(int thr_id, struct work *work, uint32_t max_nonce, unsi
gettimeofday(tv_end, NULL); gettimeofday(tv_end, NULL);
return 1; return 1;
} else { } else {
applog(LOG_WARNING, "GPU #%d: %s result does not validate on CPU! (i=%d, s=%d)", gpulog(LOG_WARNING, thr_id, "result does not validate on CPU! (i=%d, s=%d)", i, cur);
device_map[thr_id], device_name[thr_id], i, cur);
} }
} }
} }

3
scrypt.cpp

@ -932,8 +932,7 @@ int scanhash_scrypt(int thr_id, struct work *work, uint32_t max_nonce, unsigned
} }
if (!good) { if (!good) {
applog(LOG_WARNING, "GPU #%d: %s result does not validate on CPU! (i=%d, s=%d)", gpulog(LOG_WARNING, thr_id, "result does not validate on CPU! (i=%d, s=%d)", i, cur);
device_map[thr_id], device_name[thr_id], i, cur);
} else { } else {
*hashes_done = n - pdata[19]; *hashes_done = n - pdata[19];
work_set_target_ratio(work, refhash); work_set_target_ratio(work, refhash);

Loading…
Cancel
Save