Always set DeviceVendor
authorPaul Bauer <paul.bauer.q@gmail.com>
Mon, 5 Oct 2020 15:33:02 +0000 (15:33 +0000)
committerArtem Zhmurov <zhmurov@gmail.com>
Mon, 5 Oct 2020 15:33:02 +0000 (15:33 +0000)
Until now, only the OpenCL code would set the device Vendor information.
To prepare for later code that always needs this information, it is not
set also for the CUDA and SYCL code paths with (hopefully) reasonable
default values.

Change-Id: Ifb3180dff2c5b13aedd8e6808c172ea322d5cea8

src/gromacs/hardware/device_information.h
src/gromacs/hardware/device_management.cu
src/gromacs/hardware/device_management_sycl.cpp

index fd1a806b886ce145263ea72f8a33b6f30b2acbe6..54915dc52ec5f4dc05e320cb62075fa2c4ceee6f 100644 (file)
@@ -139,7 +139,8 @@ struct DeviceInformation
     DeviceStatus status;
     //! ID of the device.
     int id;
-
+    //! Device vendor.
+    DeviceVendor deviceVendor;
 #if GMX_GPU_CUDA
     //! CUDA device properties.
     cudaDeviceProp prop;
@@ -151,7 +152,6 @@ struct DeviceInformation
     char           vendorName[256];     //!< Device vendor name.
     int            compute_units;       //!< Number of compute units.
     int            adress_bits;         //!< Number of address bits the device is capable of.
-    DeviceVendor   deviceVendor;        //!< Device vendor.
     size_t         maxWorkItemSizes[3]; //!< Workgroup size limits (CL_DEVICE_MAX_WORK_ITEM_SIZES).
     size_t         maxWorkGroupSize;    //!< Workgroup total size limit (CL_DEVICE_MAX_WORK_GROUP_SIZE).
 #elif GMX_GPU_SYCL
index b59b51e59a10af1a1226ed879123207bed8ac310..a09d6bf99a2d729c6d37ee4739106da95cf2b58c 100644 (file)
@@ -288,9 +288,10 @@ std::vector<std::unique_ptr<DeviceInformation>> findDevices()
         memset(&prop, 0, sizeof(cudaDeviceProp));
         stat = cudaGetDeviceProperties(&prop, i);
 
-        deviceInfoList[i]       = std::make_unique<DeviceInformation>();
-        deviceInfoList[i]->id   = i;
-        deviceInfoList[i]->prop = prop;
+        deviceInfoList[i]               = std::make_unique<DeviceInformation>();
+        deviceInfoList[i]->id           = i;
+        deviceInfoList[i]->prop         = prop;
+        deviceInfoList[i]->deviceVendor = DeviceVendor::Nvidia;
 
         const DeviceStatus checkResult = (stat != cudaSuccess) ? DeviceStatus::NonFunctional
                                                                : checkDeviceStatus(*deviceInfoList[i]);
index 8a7e74ef5f9c0d65f55ee056d49333899438ac51..3af537ea0d21f6ecc0525304c579cb065d6cfc92 100644 (file)
@@ -198,9 +198,10 @@ std::vector<std::unique_ptr<DeviceInformation>> findDevices()
 
         size_t i = deviceInfos.size() - 1;
 
-        deviceInfos[i]->id         = i;
-        deviceInfos[i]->syclDevice = syclDevice;
-        deviceInfos[i]->status     = checkDevice(i, *deviceInfos[i]);
+        deviceInfos[i]->id           = i;
+        deviceInfos[i]->syclDevice   = syclDevice;
+        deviceInfos[i]->status       = checkDevice(i, *deviceInfos[i]);
+        deviceInfos[i]->deviceVendor = DeviceVendor::Unknown;
     }
     return deviceInfos;
 }