gpu: Fix SMP process to GPU mapping 21/5021/4
authorMichael Robson <mprobson@illinois.edu>
Thu, 14 Mar 2019 19:10:32 +0000 (12:10 -0700)
committerRaghavendra K <raghavendra066@gmail.com>
Tue, 19 Mar 2019 16:17:25 +0000 (11:17 -0500)
This patch preserves the round robin ordering of non-smp mode
while ensuring that separate SMP processes are mapped to distinct
GPUs, if they're available. Further work needs to be done to enable
topology and locality aware mapping and user sepcification.

Change-Id: Ief8d89d37bdffbbeae20608f75ec29afe3027ca8

src/arch/cuda/hybridAPI/hapi_impl.cpp

index 2bcce4825eb674cae99cf22ea861356f8305bddb..d8fe578933568908458ee38882a9b906ca5173d1 100644 (file)
@@ -77,10 +77,10 @@ void initEventQueues() {
 
 // Returns the CUDA device associated with the given PE.
 // TODO: should be updated to exploit the hardware topology instead of round robin
 
 // Returns the CUDA device associated with the given PE.
 // TODO: should be updated to exploit the hardware topology instead of round robin
-static inline int getMyCudaDevice(int my_pe) {
+static inline int getMyCudaDevice(int my_node) {
   int device_count;
   hapiCheck(cudaGetDeviceCount(&device_count));
   int device_count;
   hapiCheck(cudaGetDeviceCount(&device_count));
-  return my_pe % device_count;
+  return my_node % device_count;
 }
 
 // A function in ck.C which casts the void* to a CkCallback object and invokes
 }
 
 // A function in ck.C which casts the void* to a CkCallback object and invokes
@@ -204,7 +204,7 @@ void GPUManager::init() {
 #endif
 
   // store CUDA device properties
 #endif
 
   // store CUDA device properties
-  hapiCheck(cudaGetDeviceProperties(&device_prop_, getMyCudaDevice(CmiMyPe())));
+  hapiCheck(cudaGetDeviceProperties(&device_prop_, getMyCudaDevice(CmiMyNode())));
 
 #ifdef HAPI_CUDA_CALLBACK
   // check if CUDA callback is supported
 
 #ifdef HAPI_CUDA_CALLBACK
   // check if CUDA callback is supported