Access the device status directly, remove the getter
[alexxy/gromacs.git] / src / gromacs / gpu_utils / tests / hostallocator.cpp
index 2817628b9e877ebfcc32a0d1ba6f6e940f2eb580..7f2408fb4480f96a11b0ca96a5bade06dc5ebe62 100644 (file)
@@ -97,7 +97,7 @@ ArrayRef<char> charArrayRefFromArray(T* data, size_t size)
 
 //! Does a device transfer of \c input to the device in \c gpuInfo, and back to \c output.
 template<typename T>
-void runTest(const gmx_gpu_info_t& gpuInfo, ArrayRef<T> input, ArrayRef<T> output)
+void runTest(const DeviceInformation& deviceInfo, ArrayRef<T> input, ArrayRef<T> output)
 {
     // Convert the views of input and output to flat non-const chars,
     // so that there's no templating when we call doDeviceTransfers.
@@ -105,7 +105,8 @@ void runTest(const gmx_gpu_info_t& gpuInfo, ArrayRef<T> input, ArrayRef<T> outpu
     auto outputRef = charArrayRefFromArray(output.data(), output.size());
 
     ASSERT_EQ(inputRef.size(), outputRef.size());
-    doDeviceTransfers(gpuInfo, inputRef, outputRef);
+
+    doDeviceTransfers(deviceInfo, inputRef, outputRef);
     compareViews(input, output);
 }
 
@@ -198,12 +199,15 @@ TYPED_TEST(HostAllocatorTestCopyable, VectorsWithDefaultHostAllocatorAlwaysWorks
 
 TYPED_TEST(HostAllocatorTestCopyable, TransfersWithoutPinningWork)
 {
-    typename TestFixture::VectorType input;
-    fillInput(&input, 1);
-    typename TestFixture::VectorType output;
-    output.resizeWithPadding(input.size());
+    for (const DeviceInformation& compatibleDeviceInfo : getCompatibleDevices(this->deviceInfoList_))
+    {
+        typename TestFixture::VectorType input;
+        fillInput(&input, 1);
+        typename TestFixture::VectorType output;
+        output.resizeWithPadding(input.size());
 
-    runTest(*this->gpuInfo_, makeArrayRef(input), makeArrayRef(output));
+        runTest(compatibleDeviceInfo, makeArrayRef(input), makeArrayRef(output));
+    }
 }
 
 TYPED_TEST(HostAllocatorTestCopyable, FillInputAlsoWorksAfterCallingReserve)
@@ -292,19 +296,17 @@ TYPED_TEST(HostAllocatorTestNoMem, Comparison)
 
 TYPED_TEST(HostAllocatorTestCopyable, TransfersWithPinningWorkWithCuda)
 {
-    if (!this->haveCompatibleGpus())
+    for (auto& deviceInfo : this->deviceInfoList_)
     {
-        return;
+        typename TestFixture::VectorType input;
+        changePinningPolicy(&input, PinningPolicy::PinnedIfSupported);
+        fillInput(&input, 1);
+        typename TestFixture::VectorType output;
+        changePinningPolicy(&output, PinningPolicy::PinnedIfSupported);
+        output.resizeWithPadding(input.size());
+
+        runTest(*deviceInfo, makeArrayRef(input), makeArrayRef(output));
     }
-
-    typename TestFixture::VectorType input;
-    changePinningPolicy(&input, PinningPolicy::PinnedIfSupported);
-    fillInput(&input, 1);
-    typename TestFixture::VectorType output;
-    changePinningPolicy(&output, PinningPolicy::PinnedIfSupported);
-    output.resizeWithPadding(input.size());
-
-    runTest(*this->gpuInfo_, makeArrayRef(input), makeArrayRef(output));
 }
 
 //! Helper function for wrapping a call to isHostMemoryPinned.
@@ -317,7 +319,7 @@ bool isPinned(const VectorType& v)
 
 TYPED_TEST(HostAllocatorTestCopyable, ManualPinningOperationsWorkWithCuda)
 {
-    if (!this->haveCompatibleGpus())
+    if (!canComputeOnDevice())
     {
         return;
     }