From 0b2823ba553141fec54d4cb644ac5e43937393f7 Mon Sep 17 00:00:00 2001 From: Kenneth Moreland Date: Thu, 14 Jan 2016 15:22:33 -0700 Subject: [PATCH] Make UnitTestArrayHandleCartesianProduct faster Reduce the number of conditions UnitTestArrayHandleCartesianProduct tries so that it is faster. All the conditions are pretty similar, so it should be OK to reduce some. --- .../UnitTestArrayHandleCartesianProduct.cxx | 68 ++++++++++--------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/vtkm/cont/testing/UnitTestArrayHandleCartesianProduct.cxx b/vtkm/cont/testing/UnitTestArrayHandleCartesianProduct.cxx index b71e1d022..9764387b9 100644 --- a/vtkm/cont/testing/UnitTestArrayHandleCartesianProduct.cxx +++ b/vtkm/cont/testing/UnitTestArrayHandleCartesianProduct.cxx @@ -35,15 +35,15 @@ typedef vtkm::cont::DeviceAdapterAlgorithm DFA; template void ArrayHandleCPBasic(vtkm::cont::ArrayHandle x, - vtkm::cont::ArrayHandle y, - vtkm::cont::ArrayHandle z) - + vtkm::cont::ArrayHandle y, + vtkm::cont::ArrayHandle z) + { vtkm::cont::ArrayHandleCartesianProduct< - vtkm::cont::ArrayHandle, - vtkm::cont::ArrayHandle, - vtkm::cont::ArrayHandle > cpArray; - + vtkm::cont::ArrayHandle, + vtkm::cont::ArrayHandle, + vtkm::cont::ArrayHandle > cpArray; + vtkm::Id nx = x.GetNumberOfValues(); vtkm::Id ny = y.GetNumberOfValues(); vtkm::Id nz = z.GetNumberOfValues(); @@ -53,21 +53,21 @@ void ArrayHandleCPBasic(vtkm::cont::ArrayHandle x, //Make sure we have the right number of values. VTKM_TEST_ASSERT(cpArray.GetNumberOfValues() == (nx*ny*nz), - "Cartesian array constructor has wrong number of values"); + "Cartesian array constructor has wrong number of values"); //Make sure the values are correct. vtkm::Vec val; for (vtkm::Id i = 0; i < n; i++) { - vtkm::Id idx0 = (i % (nx*ny)) % nx; - vtkm::Id idx1 = (i % (nx*ny)) / nx; - vtkm::Id idx2 = i / (nx*ny); - - val = vtkm::Vec(x.GetPortalConstControl().Get(idx0), - y.GetPortalConstControl().Get(idx1), - z.GetPortalConstControl().Get(idx2)); - VTKM_TEST_ASSERT(test_equal(cpArray.GetPortalConstControl().Get(i), val), - "Wrong value in array"); + vtkm::Id idx0 = (i % (nx*ny)) % nx; + vtkm::Id idx1 = (i % (nx*ny)) / nx; + vtkm::Id idx2 = i / (nx*ny); + + val = vtkm::Vec(x.GetPortalConstControl().Get(idx0), + y.GetPortalConstControl().Get(idx1), + z.GetPortalConstControl().Get(idx2)); + VTKM_TEST_ASSERT(test_equal(cpArray.GetPortalConstControl().Get(i), val), + "Wrong value in array"); } } @@ -76,28 +76,32 @@ void createArr(std::vector &arr, std::size_t n) { arr.resize(n); for (std::size_t i = 0; i < n; i++) - arr[i] = static_cast(i); + arr[i] = static_cast(i); } template void RunTest() { - std::size_t nX = 10, nY = 10, nZ = 10; + std::size_t nX = 11, nY = 13, nZ = 11; - for (std::size_t i = 1; i < nX; i++) - for (std::size_t j = 1; j < nY; j++) - for (std::size_t k = 1; k < nZ; k++) - { - std::vector X,Y,Z; - createArr(X, nX); - createArr(Y, nY); - createArr(Z, nZ); - - ArrayHandleCPBasic(vtkm::cont::make_ArrayHandle(X), - vtkm::cont::make_ArrayHandle(Y), - vtkm::cont::make_ArrayHandle(Z)); - } + for (std::size_t i = 1; i < nX; i += 2) + { + for (std::size_t j = 1; j < nY; j += 4) + { + for (std::size_t k = 1; k < nZ; k += 5) + { + std::vector X,Y,Z; + createArr(X, nX); + createArr(Y, nY); + createArr(Z, nZ); + + ArrayHandleCPBasic(vtkm::cont::make_ArrayHandle(X), + vtkm::cont::make_ArrayHandle(Y), + vtkm::cont::make_ArrayHandle(Z)); + } + } + } } void