Kaynağa Gözat

An extra argument to worker specifies te CUDA device to use

Ian Goldberg 14 yıl önce
ebeveyn
işleme
9ca02921e8
3 değiştirilmiş dosya ile 19 ekleme ve 2 silme
  1. 2 0
      cudadl.h
  2. 10 0
      parrhoasm.cu
  3. 7 2
      worker.cc

+ 2 - 0
cudadl.h

@@ -25,6 +25,8 @@
 
 NTL_CLIENT
 
+int cuda_init(int deviceid);
+
 void cuda_dl(const ZZ_p &base, const ZZ_p &target, const ZZ &order,
 		const ZZ &modulus, unsigned int dpfreq, void *data);
 

+ 10 - 0
parrhoasm.cu

@@ -56,6 +56,16 @@ __device__ __constant__ unsigned int c_y[SIZE_Y], c_g[SIZE_G];
 
 NTL_CLIENT
 
+int cuda_init(int deviceid)
+{
+    cudaError_t cudares = cudaSetDevice(deviceid);
+    if (cudares != cudaSuccess) {
+	return -1;
+    }
+
+    return 0;
+}
+
 #ifdef CHECK_RESULTS
 static void dump(const char *prefix, const unsigned int *di, size_t words)
 {

+ 7 - 2
worker.cc

@@ -283,13 +283,18 @@ static void controllerconn_event_cb(struct bufferevent *bev, short events,
 
 int main(int argc, char **argv)
 {
-    if (argc != 3) {
-	fprintf(stderr, "Usage: %s controller_host controller_port\n", argv[0]);
+    if (argc != 4) {
+	fprintf(stderr, "Usage: %s controller_host controller_port cuda_dev_id\n", argv[0]);
 	return 1;
     }
 
     unsigned short controller_port = strtoul(argv[2], NULL, 10);
 
+    if (cuda_init(strtoul(argv[3], NULL, 10)) < 0) {
+	cerr << "Error setting CUDA device\n";
+	exit(1);
+    }
+
     evthread_use_pthreads();
 
     signal(SIGPIPE, SIG_IGN);