From 85699850d98a64abbf8e1fac7736b57ca0d883ad Mon Sep 17 00:00:00 2001 From: Igor Babuschkin Date: Wed, 29 Jun 2016 11:54:35 +0100 Subject: Add missing CUDA kernel to tensor scan op The TensorScanOp implementation was missing a CUDA kernel launch. This adds a simple placeholder implementation. --- unsupported/test/cxx11_tensor_scan.cpp | 118 +++++++++++++++------------------ 1 file changed, 53 insertions(+), 65 deletions(-) (limited to 'unsupported/test/cxx11_tensor_scan.cpp') 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 +template static void test_1d_scan() { - int size = 50; - Tensor tensor(size); - tensor.setRandom(); - Tensor 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 -static void test_1d_inclusive_scan() -{ - int size = 50; - Tensor tensor(size); - tensor.setRandom(); - Tensor result = tensor.cumsum(0, true); + int size = 50; + Tensor tensor(size); + tensor.setRandom(); + Tensor 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 static void test_4d_scan() { - int size = 5; - Tensor tensor(size, size, size, size); - tensor.setRandom(); + int size = 5; + Tensor tensor(size, size, size, size); + tensor.setRandom(); - Tensor result(size, size, size, size); + Tensor 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 @@ -113,8 +99,10 @@ static void test_tensor_maps() { } void test_cxx11_tensor_scan() { - CALL_SUBTEST(test_1d_scan()); - CALL_SUBTEST(test_1d_scan()); + CALL_SUBTEST((test_1d_scan())); + CALL_SUBTEST((test_1d_scan())); + CALL_SUBTEST((test_1d_scan())); + CALL_SUBTEST((test_1d_scan())); CALL_SUBTEST(test_4d_scan()); CALL_SUBTEST(test_4d_scan()); CALL_SUBTEST(test_tensor_maps()); -- cgit v1.2.3