Commit 72baac0889293a1e684c4225f36064e0c635cf7a

Con Kolivas 2011-06-30T21:55:39

Clearly delineate the cpus from the gpus for their local data.

diff --git a/cpu-miner.c b/cpu-miner.c
index 5777bce..0428610 100644
--- a/cpu-miner.c
+++ b/cpu-miner.c
@@ -1277,9 +1277,10 @@ int main (int argc, char *argv[])
 	struct thr_info *thr;
 	unsigned int i;
 	char name[32];
+	struct cgpu_info *gpus, *cpus;
 
 #ifdef WIN32
-	opt_n_threads = 1;
+	opt_n_threads = num_processors = 1;
 #else
 	num_processors = sysconf(_SC_NPROCESSORS_ONLN);
 	opt_n_threads = num_processors;
@@ -1376,22 +1377,30 @@ int main (int argc, char *argv[])
 	gettimeofday(&total_tv_start, NULL);
 	gettimeofday(&total_tv_end, NULL);
 
+	if (opt_n_threads ) {
+		cpus = calloc(num_processors, sizeof(struct cgpu_info));
+		if (unlikely(!cpus)) {
+			applog(LOG_ERR, "Failed to calloc cpus");
+			return 1;
+		}
+	}
+	if (gpu_threads) {
+		gpus = calloc(nDevs, sizeof(struct cgpu_info));
+		if (unlikely(!gpus)) {
+			applog(LOG_ERR, "Failed to calloc gpus");
+			return 1;
+		}
+	}
+
 	/* start GPU mining threads */
 	for (i = 0; i < gpu_threads; i++) {
 		int gpu = gpu_from_thr_id(i);
 
 		thr = &thr_info[i];
 		thr->id = i;
-		if (!thr->cgpu) {
-			thr->cgpu = calloc(1, sizeof(struct cgpu_info));
-			if (unlikely(!thr->cgpu)) {
-				applog(LOG_ERR, "Failed to calloc cgpu_info");
-				return 1;
-			}
-			thr->cgpu->is_gpu = 1;
-			thr->cgpu->cpu_gpu = gpu;
-		} else
-			thr->cgpu = thr_info[gpu].cgpu;
+		gpus[gpu].is_gpu = 1;
+		gpus[gpu].cpu_gpu = gpu;
+		thr->cgpu = &gpus[gpu];
 
 		thr->q = tq_new();
 		if (!thr->q) {
@@ -1423,15 +1432,8 @@ int main (int argc, char *argv[])
 		thr = &thr_info[i];
 
 		thr->id = i;
-		if (!thr->cgpu) {
-			thr->cgpu = calloc(1, sizeof(struct cgpu_info));
-			if (unlikely(!thr->cgpu)) {
-				applog(LOG_ERR, "Failed to calloc cgpu_info");
-				return 1;
-			}
-			thr->cgpu->cpu_gpu = cpu;
-		} else
-			thr->cgpu = thr_info[cpu].cgpu;
+		cpus[cpu].cpu_gpu = cpu;
+		thr->cgpu = &cpus[cpu];
 
 		thr->q = tq_new();
 		if (!thr->q) {
@@ -1463,6 +1465,10 @@ int main (int argc, char *argv[])
 	/* main loop - simply wait for workio thread to exit */
 	pthread_join(thr_info[work_thr_id].pth, NULL);
 	curl_global_cleanup();
+	if (gpu_threads)
+		free(gpus);
+	if (opt_n_threads)
+		free(cpus);
 
 	applog(LOG_INFO, "workio thread dead, exiting.");