Spaces:
Runtime error
Runtime error
File size: 2,000 Bytes
be11144 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
#include <unittest/unittest.h>
#include <thrust/swap.h>
#include <thrust/execution_policy.h>
template<typename ExecutionPolicy, typename Iterator1, typename Iterator2>
__global__
void swap_ranges_kernel(ExecutionPolicy exec, Iterator1 first1, Iterator1 last1, Iterator2 first2)
{
thrust::swap_ranges(exec, first1, last1, first2);
}
template<typename ExecutionPolicy>
void TestSwapRangesDevice(ExecutionPolicy exec)
{
typedef thrust::device_vector<int> Vector;
Vector v1(5);
v1[0] = 0; v1[1] = 1; v1[2] = 2; v1[3] = 3; v1[4] = 4;
Vector v2(5);
v2[0] = 5; v2[1] = 6; v2[2] = 7; v2[3] = 8; v2[4] = 9;
swap_ranges_kernel<<<1,1>>>(exec, v1.begin(), v1.end(), v2.begin());
cudaError_t const err = cudaDeviceSynchronize();
ASSERT_EQUAL(cudaSuccess, err);
ASSERT_EQUAL(v1[0], 5);
ASSERT_EQUAL(v1[1], 6);
ASSERT_EQUAL(v1[2], 7);
ASSERT_EQUAL(v1[3], 8);
ASSERT_EQUAL(v1[4], 9);
ASSERT_EQUAL(v2[0], 0);
ASSERT_EQUAL(v2[1], 1);
ASSERT_EQUAL(v2[2], 2);
ASSERT_EQUAL(v2[3], 3);
ASSERT_EQUAL(v2[4], 4);
}
void TestSwapRangesDeviceSeq()
{
TestSwapRangesDevice(thrust::seq);
}
DECLARE_UNITTEST(TestSwapRangesDeviceSeq);
void TestSwapRangesDeviceDevice()
{
TestSwapRangesDevice(thrust::device);
}
DECLARE_UNITTEST(TestSwapRangesDeviceDevice);
void TestSwapRangesCudaStreams()
{
typedef thrust::device_vector<int> Vector;
Vector v1(5);
v1[0] = 0; v1[1] = 1; v1[2] = 2; v1[3] = 3; v1[4] = 4;
Vector v2(5);
v2[0] = 5; v2[1] = 6; v2[2] = 7; v2[3] = 8; v2[4] = 9;
cudaStream_t s;
cudaStreamCreate(&s);
thrust::swap_ranges(thrust::cuda::par.on(s), v1.begin(), v1.end(), v2.begin());
cudaStreamSynchronize(s);
ASSERT_EQUAL(v1[0], 5);
ASSERT_EQUAL(v1[1], 6);
ASSERT_EQUAL(v1[2], 7);
ASSERT_EQUAL(v1[3], 8);
ASSERT_EQUAL(v1[4], 9);
ASSERT_EQUAL(v2[0], 0);
ASSERT_EQUAL(v2[1], 1);
ASSERT_EQUAL(v2[2], 2);
ASSERT_EQUAL(v2[3], 3);
ASSERT_EQUAL(v2[4], 4);
cudaStreamDestroy(s);
}
DECLARE_UNITTEST(TestSwapRangesCudaStreams);
|