# Test SIMD implementation of pair search for GPU code-path
gcc-7 gpuhw=nvidia gpu_id=1 cuda-9.2 thread-mpi openmp cmake-3.6.1 release-with-assert simd=avx2_256
-# Test with ThreadSanitizer (compiled without OpenMP, even though
-# this gcc was configured with --disable-linux-futex, because
-# Redmine #1850 is unresolved, which causes more suspected
-# false positives than races detected)
-# Test newest gcc at time of release
-gcc-7 tsan no-openmp cmake-3.10.0
+# Test with libcxx
+# Test with ThreadSanitizer + OpenMP + SIMD
+clang-7 no-hwloc tsan libcxx-7 openmp cmake-3.12.1 simd=avx2_256
# Test on MacOS (the gcc-6 and/or x11 flags implicitly steer jobs to the OSX agent)
# Test X11 build
# Add OpenMP support to ASAN build (but libomp.so in clang-4 reports leaks, so might need a suitable build or suppression)
# Test hwloc-2 support
# Test newest supported LTS Ubuntu
-# Resolve Redmine #1850 so that ThreadSanitizer can test our OpenMP code
# Test AVX-512 when hardware is available
# Update to test gcc 8
# Update to test clang 7
}
#if GMX_SIMD_HAVE_REAL
+//! Helper function so that we can run TSAN with SIMD support (where implemented).
+template <int align>
+static inline void gmx_simdcall
+gatherLoadUTransposeTSANSafe(const real *base,
+ const std::int32_t *offset,
+ SimdReal *v0,
+ SimdReal *v1,
+ SimdReal *v2)
+{
+#if (CMAKE_BUILD_TYPE == CMAKE_BUILD_TYPE_TSAN) && GMX_SIMD_X86_AVX2_256
+ // This function is only implemented in this case
+ gatherLoadUTransposeSafe<align>(base, offset, v0, v1, v2);
+#else
+ gatherLoadUTranspose<align>(base, offset, v0, v1, v2);
+#endif
+}
+
/*! \brief Calculate the constraint distance vectors r to project on from x.
*
* Determine the right-hand side of the matrix equation using quantity f.
offset1[i] = bla[bs*2 + i*2 + 1];
}
- gatherLoadUTranspose<3>(reinterpret_cast<const real *>(x), offset0, &x0_S, &y0_S, &z0_S);
- gatherLoadUTranspose<3>(reinterpret_cast<const real *>(x), offset1, &x1_S, &y1_S, &z1_S);
+ gatherLoadUTransposeTSANSafe<3>(reinterpret_cast<const real *>(x), offset0, &x0_S, &y0_S, &z0_S);
+ gatherLoadUTransposeTSANSafe<3>(reinterpret_cast<const real *>(x), offset1, &x1_S, &y1_S, &z1_S);
rx_S = x0_S - x1_S;
ry_S = y0_S - y1_S;
rz_S = z0_S - z1_S;
transposeScatterStoreU<3>(reinterpret_cast<real *>(r + bs), offset2, rx_S, ry_S, rz_S);
- gatherLoadUTranspose<3>(reinterpret_cast<const real *>(f), offset0, &x0_S, &y0_S, &z0_S);
- gatherLoadUTranspose<3>(reinterpret_cast<const real *>(f), offset1, &x1_S, &y1_S, &z1_S);
+ gatherLoadUTransposeTSANSafe<3>(reinterpret_cast<const real *>(f), offset0, &x0_S, &y0_S, &z0_S);
+ gatherLoadUTransposeTSANSafe<3>(reinterpret_cast<const real *>(f), offset1, &x1_S, &y1_S, &z1_S);
fx_S = x0_S - x1_S;
fy_S = y0_S - y1_S;
fz_S = z0_S - z1_S;
#if GMX_SIMD_HAVE_REAL
-//! Helper function so that we can run TSAN with SIMD support (where implemented).
-template <int align>
-static inline void gmx_simdcall
-gatherLoadUTransposeTSANSafe(const real *base,
- const std::int32_t *offset,
- SimdReal *v0,
- SimdReal *v1,
- SimdReal *v2)
-{
-#if (CMAKE_BUILD_TYPE == CMAKE_BUILD_TYPE_TSAN) && GMX_SIMD_X86_AVX2_256
- // This function is only implemented in this case
- gatherLoadUTransposeSafe<align>(base, offset, v0, v1, v2);
-#else
- gatherLoadUTranspose<align>(base, offset, v0, v1, v2);
-#endif
-}
-
/*! \brief Calculate the constraint distance vectors r to project on from x.
*
* Determine the right-hand side of the matrix equation using coordinates xp. */