//! 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.
auto outputRef = charArrayRefFromArray(output.data(), output.size());
ASSERT_EQ(inputRef.size(), outputRef.size());
- doDeviceTransfers(gpuInfo, inputRef, outputRef);
+
+ doDeviceTransfers(deviceInfo, inputRef, outputRef);
compareViews(input, output);
}
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)
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.
TYPED_TEST(HostAllocatorTestCopyable, ManualPinningOperationsWorkWithCuda)
{
- if (!this->haveCompatibleGpus())
+ if (!canComputeOnDevice())
{
return;
}