gpu: Actually fix PE to GPU mapping 42/5042/3
authorMichael Robson <mprobson@illinois.edu>
Thu, 28 Mar 2019 16:05:07 +0000 (09:05 -0700)
committerRaghavendra K <raghavendra066@gmail.com>
Mon, 1 Apr 2019 23:36:08 +0000 (18:36 -0500)
The original commit queried the correct device but did not actually
set the corect device. This fixes that bug as well as setting the
correct device for non-zero threads in SMP mode.

Change-Id: I9ecc9ef0d771b1e2b2bfb9b7e4d18eb25e615b43

src/arch/cuda/hybridAPI/hapi_impl.cpp
src/arch/cuda/hybridAPI/hapi_impl.h
src/ck-core/init.C

index d8fe578933568908458ee38882a9b906ca5173d1..45b644af6639f690b125b277653365fddcad1269 100644 (file)
@@ -216,7 +216,7 @@ void GPUManager::init() {
 #endif
 
   // set which device to use
 #endif
 
   // set which device to use
-  hapiCheck(cudaSetDevice(getMyCudaDevice(CmiMyPe())));
+  hapiCheck(cudaSetDevice(getMyCudaDevice(CmiMyNode())));
 
   // allocate host/device buffers array (both user and system-addressed)
   host_buffers_ = new void*[NUM_BUFFERS*2];
 
   // allocate host/device buffers array (both user and system-addressed)
   host_buffers_ = new void*[NUM_BUFFERS*2];
@@ -736,6 +736,12 @@ void initHybridAPI() {
 #endif // HAPI_MEMPOOL
 }
 
 #endif // HAPI_MEMPOOL
 }
 
+// Set HAPI device for non-0 ranks
+void setHybridAPIDevice() {
+  // set which device to use
+  hapiCheck(cudaSetDevice(getMyCudaDevice(CmiMyNode())));
+}
+
 // Clean up and delete memory used by HAPI.
 void exitHybridAPI() {
 #if CMK_SMP || CMK_MULTICORE
 // Clean up and delete memory used by HAPI.
 void exitHybridAPI() {
 #if CMK_SMP || CMK_MULTICORE
index c4457661f3da3ced7c1139dcf65c9be935335a90..b38eaa4a8c3d6d64f26f1c3d311da7cb4266f3f4 100644 (file)
@@ -7,6 +7,7 @@ extern "C" {
 
 // Initialize & exit hybrid API.
 void initHybridAPI();
 
 // Initialize & exit hybrid API.
 void initHybridAPI();
+void setHybridAPIDevice();
 void exitHybridAPI();
 
 // Initializes event queues used for polling.
 void exitHybridAPI();
 
 // Initializes event queues used for polling.
index 2565789a92c8d7c08b59f1feec6adcc88216544f..012b4f79cd62fcb3fb7f516fc1caaf0402ef05a5 100644 (file)
@@ -1517,6 +1517,9 @@ void _initCharm(int unused_argc, char **argv)
     if (CmiMyRank() == 0) {
       initHybridAPI();
     }
     if (CmiMyRank() == 0) {
       initHybridAPI();
     }
+    else /* CmiMyRank() != 0 */ {
+      setHybridAPIDevice();
+    }
     initEventQueues();
 
     // ensure HAPI is initialized before registering callback functions
     initEventQueues();
 
     // ensure HAPI is initialized before registering callback functions