From f824112b1337f244bf1ac471cb276d7c64c524cd Mon Sep 17 00:00:00 2001 From: Sam Yates <yates@cscs.ch> Date: Tue, 22 Jan 2019 15:36:38 +0100 Subject: [PATCH] Bugfix: SIMD indirect unit tests + indirect add (#674) * Fix bug in optimized (scalar) unconstrained indirect addition. * Fix bug in indirect arithmetic and scatter tests that tested only a subset of the test data. --- include/arbor/simd/simd.hpp | 5 +++-- test/unit/test_simd.cpp | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/arbor/simd/simd.hpp b/include/arbor/simd/simd.hpp index 535b8233..a3f6cd59 100644 --- a/include/arbor/simd/simd.hpp +++ b/include/arbor/simd/simd.hpp @@ -211,7 +211,7 @@ namespace simd_detail { template <typename ImplIndex> static void compound_indexed_add(tag<ImplIndex> tag, const vector_type& s, scalar_type* p, const typename ImplIndex::vector_type& index, index_constraint constraint) { - switch (constraint) { + switch (constraint) { case index_constraint::none: { typename ImplIndex::scalar_type o[width]; @@ -228,7 +228,8 @@ namespace simd_detail { temp = 0; } } - p[o[width-1]] = temp; + temp += a[width-1]; + p[o[width-1]] += temp; } break; case index_constraint::independent: diff --git a/test/unit/test_simd.cpp b/test/unit/test_simd.cpp index 40c05587..9be4a7e8 100644 --- a/test/unit/test_simd.cpp +++ b/test/unit/test_simd.cpp @@ -981,7 +981,7 @@ TYPED_TEST_P(simd_indirect, scatter) { simd s(values); s.copy_to(indirect(array, simd_index(offset))); - EXPECT_TRUE(::testing::indexed_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array)); } } @@ -1019,7 +1019,7 @@ TYPED_TEST_P(simd_indirect, masked_scatter) { simd_mask m(mask); where(m, s).copy_to(indirect(array, simd_index(offset))); - EXPECT_TRUE(::testing::indexed_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array)); } } @@ -1051,7 +1051,7 @@ TYPED_TEST_P(simd_indirect, add_and_subtract) { } indirect(array, simd_index(offset)) += simd(values); - EXPECT_TRUE(::testing::indexed_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array)); fill_random(offset, rng, 0, (int)(buflen-1)); @@ -1063,7 +1063,7 @@ TYPED_TEST_P(simd_indirect, add_and_subtract) { } indirect(array, simd_index(offset)) -= simd(values); - EXPECT_TRUE(::testing::indexed_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array)); } } @@ -1115,7 +1115,7 @@ TYPED_TEST_P(simd_indirect, constrained_add) { make_test_array(); indirect(array, simd_index(offset), index_constraint::independent) += simd(values); - EXPECT_TRUE(::testing::indexed_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array)); // Contiguous: @@ -1127,7 +1127,7 @@ TYPED_TEST_P(simd_indirect, constrained_add) { make_test_array(); indirect(array, simd_index(offset), index_constraint::contiguous) += simd(values); - EXPECT_TRUE(::testing::indexed_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array)); // Constant: @@ -1146,7 +1146,7 @@ TYPED_TEST_P(simd_indirect, constrained_add) { make_test_array(); indirect(array, simd_index(offset), index_constraint::constant) += simd(values); - EXPECT_TRUE(::testing::indexed_almost_eq_n(N, test, array)); + EXPECT_TRUE(::testing::indexed_almost_eq_n(buflen, test, array)); } } -- GitLab