diff options
author | Igor Babuschkin <igor@babuschk.in> | 2016-06-29 11:54:35 +0100 |
---|---|---|
committer | Igor Babuschkin <igor@babuschk.in> | 2016-06-29 11:54:35 +0100 |
commit | 85699850d98a64abbf8e1fac7736b57ca0d883ad (patch) | |
tree | f270871269b9dd579bcebda44a999343d8296501 /unsupported/test/cxx11_tensor_scan.cpp | |
parent | 328c5d876a582a8d5c292141c6ad2784fad2a950 (diff) |
Add missing CUDA kernel to tensor scan op
The TensorScanOp implementation was missing a CUDA kernel launch.
This adds a simple placeholder implementation.
Diffstat (limited to 'unsupported/test/cxx11_tensor_scan.cpp')
-rw-r--r-- | unsupported/test/cxx11_tensor_scan.cpp | 118 |
1 files changed, 53 insertions, 65 deletions
diff --git a/unsupported/test/cxx11_tensor_scan.cpp b/unsupported/test/cxx11_tensor_scan.cpp index bafa6c96e..af59aa3ef 100644 --- a/unsupported/test/cxx11_tensor_scan.cpp +++ b/unsupported/test/cxx11_tensor_scan.cpp @@ -14,87 +14,73 @@ using Eigen::Tensor; -template <int DataLayout, typename Type=float> +template <int DataLayout, typename Type=float, bool Exclusive = false> static void test_1d_scan() { - int size = 50; - Tensor<Type, 1, DataLayout> tensor(size); - tensor.setRandom(); - Tensor<Type, 1, DataLayout> result = tensor.cumsum(0); - - VERIFY_IS_EQUAL(tensor.dimension(0), result.dimension(0)); - - float accum = 0; - for (int i = 0; i < size; i++) { - accum += tensor(i); - VERIFY_IS_EQUAL(result(i), accum); - } - - accum = 1; - result = tensor.cumprod(0); - for (int i = 0; i < size; i++) { - accum *= tensor(i); - VERIFY_IS_EQUAL(result(i), accum); - } -} - -template <int DataLayout, typename Type=float> -static void test_1d_inclusive_scan() -{ - int size = 50; - Tensor<Type, 1, DataLayout> tensor(size); - tensor.setRandom(); - Tensor<Type, 1, DataLayout> result = tensor.cumsum(0, true); + int size = 50; + Tensor<Type, 1, DataLayout> tensor(size); + tensor.setRandom(); + Tensor<Type, 1, DataLayout> result = tensor.cumsum(0, Exclusive); - VERIFY_IS_EQUAL(tensor.dimension(0), result.dimension(0)); + VERIFY_IS_EQUAL(tensor.dimension(0), result.dimension(0)); - float accum = 0; - for (int i = 0; i < size; i++) { + float accum = 0; + for (int i = 0; i < size; i++) { + if (Exclusive) { VERIFY_IS_EQUAL(result(i), accum); accum += tensor(i); + } else { + accum += tensor(i); + VERIFY_IS_EQUAL(result(i), accum); } + } - accum = 1; - result = tensor.cumprod(0, true); - for (int i = 0; i < size; i++) { + accum = 1; + result = tensor.cumprod(0, Exclusive); + for (int i = 0; i < size; i++) { + if (Exclusive) { VERIFY_IS_EQUAL(result(i), accum); accum *= tensor(i); + } else { + accum *= tensor(i); + VERIFY_IS_EQUAL(result(i), accum); } + } } template <int DataLayout, typename Type=float> static void test_4d_scan() { - int size = 5; - Tensor<Type, 4, DataLayout> tensor(size, size, size, size); - tensor.setRandom(); + int size = 5; + Tensor<Type, 4, DataLayout> tensor(size, size, size, size); + tensor.setRandom(); - Tensor<Type, 4, DataLayout> result(size, size, size, size); + Tensor<Type, 4, DataLayout> result(size, size, size, size); - result = tensor.cumsum(0); - float accum = 0; - for (int i = 0; i < size; i++) { - accum += tensor(i, 0, 0, 0); - VERIFY_IS_EQUAL(result(i, 0, 0, 0), accum); - } - result = tensor.cumsum(1); - accum = 0; - for (int i = 0; i < size; i++) { - accum += tensor(0, i, 0, 0); - VERIFY_IS_EQUAL(result(0, i, 0, 0), accum); - } - result = tensor.cumsum(2); - accum = 0; - for (int i = 0; i < size; i++) { - accum += tensor(0, 0, i, 0); - VERIFY_IS_EQUAL(result(0, 0, i, 0), accum); - } - result = tensor.cumsum(3); - accum = 0; - for (int i = 0; i < size; i++) { - accum += tensor(0, 0, 0, i); - VERIFY_IS_EQUAL(result(0, 0, 0, i), accum); - } + result = tensor.cumsum(0); + float accum = 0; + for (int i = 0; i < size; i++) { + accum += tensor(i, 1, 2, 3); + VERIFY_IS_EQUAL(result(i, 1, 2, 3), accum); + } + result = tensor.cumsum(1); + accum = 0; + for (int i = 0; i < size; i++) { + accum += tensor(1, i, 2, 3); + VERIFY_IS_EQUAL(result(1, i, 2, 3), accum); + } + result = tensor.cumsum(2); + accum = 0; + for (int i = 0; i < size; i++) { + accum += tensor(1, 2, i, 3); + VERIFY_IS_EQUAL(result(1, 2, i, 3), accum); + } + result = tensor.cumsum(3); + accum = 0; + for (int i = 0; i < size; i++) { + accum += tensor(1, 2, 3, i); + VERIFY_IS_EQUAL(result(1, 2, 3, i), accum); + } } template <int DataLayout> @@ -113,8 +99,10 @@ static void test_tensor_maps() { } void test_cxx11_tensor_scan() { - CALL_SUBTEST(test_1d_scan<ColMajor>()); - CALL_SUBTEST(test_1d_scan<RowMajor>()); + CALL_SUBTEST((test_1d_scan<ColMajor, float, true>())); + CALL_SUBTEST((test_1d_scan<ColMajor, float, false>())); + CALL_SUBTEST((test_1d_scan<RowMajor, float, true>())); + CALL_SUBTEST((test_1d_scan<RowMajor, float, false>())); CALL_SUBTEST(test_4d_scan<ColMajor>()); CALL_SUBTEST(test_4d_scan<RowMajor>()); CALL_SUBTEST(test_tensor_maps<ColMajor>()); |