diff --git a/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h b/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h index 163e323e3..1ca663909 100644 --- a/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h +++ b/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h @@ -338,25 +338,25 @@ private: VTKM_EXEC_EXPORT vtkm::Int32 vtkmAtomicAdd(vtkm::Int32 *address, const vtkm::Int32 &value) const { - return InterlockedExchangeAdd(static_cast(address),value); + return InterlockedExchangeAdd(reinterpret_cast(address),value); } VTKM_EXEC_EXPORT vtkm::Int64 vtkmAtomicAdd(vtkm::Int64 *address, const vtkm::Int64 &value) const { - return InterlockedExchangeAdd64(static_cast(address),value); + return InterlockedExchangeAdd64(reinterpret_cast(address),value); } VTKM_EXEC_EXPORT vtkm::UInt32 vtkmAtomicAdd(vtkm::UInt32 *address, const vtkm::UInt32 &value) const { - return InterlockedExchangeAdd(static_cast(address),value); + return InterlockedExchangeAdd(reinterpret_cast(address),value); } VTKM_EXEC_EXPORT vtkm::UInt64 vtkmAtomicAdd(vtkm::UInt64 *address, const vtkm::UInt64 &value) const { - return InterlockedExchangeAdd64(static_cast(address),value); + return InterlockedExchangeAdd64(reinterpret_cast(address),value); } #else //gcc built-in atomics diff --git a/vtkm/cont/testing/TestingDeviceAdapter.h b/vtkm/cont/testing/TestingDeviceAdapter.h index 5c492e7ae..8e6d2906c 100644 --- a/vtkm/cont/testing/TestingDeviceAdapter.h +++ b/vtkm/cont/testing/TestingDeviceAdapter.h @@ -288,7 +288,8 @@ public: VTKM_EXEC_EXPORT void operator()(vtkm::Id index) const { - this->AArray.Add(0, 1); + T value = (T) index; + this->AArray.Add(0, value); } VTKM_CONT_EXPORT void SetErrorMessageBuffer( @@ -1587,6 +1588,8 @@ private: static VTKM_CONT_EXPORT void TestAtomicArray() { + vtkm::Int32 atomicCount = 0; + for(vtkm::Int32 i = 0; i < ARRAY_SIZE; i++) atomicCount += i; std::cout << "-------------------------------------------" << std::endl; // To test the atomics, ARRAY_SIZE number of threads will all increment // a single atomic value. @@ -1598,7 +1601,7 @@ private: vtkm::exec::AtomicArray atomic(atomicElement); Algorithm::Schedule(AtomicKernel(atomic), ARRAY_SIZE); - vtkm::Int32 expected = vtkm::Int32(ARRAY_SIZE); + vtkm::Int32 expected = vtkm::Int32(atomicCount); vtkm::Int32 actual= atomicElement.GetPortalControl().Get(0); VTKM_TEST_ASSERT(expected == actual, "Did not get expected value: Atomic add Int32"); } @@ -1611,7 +1614,7 @@ private: vtkm::exec::AtomicArray atomic(atomicElement); Algorithm::Schedule(AtomicKernel(atomic), ARRAY_SIZE); - vtkm::UInt32 expected = vtkm::UInt32(ARRAY_SIZE); + vtkm::UInt32 expected = vtkm::UInt32(atomicCount); vtkm::UInt32 actual= atomicElement.GetPortalControl().Get(0); VTKM_TEST_ASSERT(expected == actual, "Did not get expected value: Atomic add UInt32"); } @@ -1624,7 +1627,7 @@ private: vtkm::exec::AtomicArray atomic(atomicElement); Algorithm::Schedule(AtomicKernel(atomic), ARRAY_SIZE); - vtkm::UInt64 expected = vtkm::UInt64(ARRAY_SIZE); + vtkm::UInt64 expected = vtkm::UInt64(atomicCount); vtkm::UInt64 actual= atomicElement.GetPortalControl().Get(0); VTKM_TEST_ASSERT(expected == actual, "Did not get expected value: Atomic add UInt64"); } @@ -1637,7 +1640,7 @@ private: vtkm::exec::AtomicArray atomic(atomicElement); Algorithm::Schedule(AtomicKernel(atomic), ARRAY_SIZE); - vtkm::Int64 expected = vtkm::Int64(ARRAY_SIZE); + vtkm::Int64 expected = vtkm::Int64(atomicCount); vtkm::Int64 actual= atomicElement.GetPortalControl().Get(0); VTKM_TEST_ASSERT(expected == actual, "Did not get expected value: Atomic add Int64"); }