[PATCH] Enable use of #pragma omp simd reduction(inscan,...) even for GCC10+ in PSTL
Thomas Rodgers
trodgers@redhat.com
Mon Jun 24 22:18:00 GMT 2019
Ok for trunk.
> Can you push it into upstream PSTL?
Yes.
Thanks,
Tom.
Jakub Jelinek writes:
> Hi!
>
> Now that GCC supports inclusive/exclusive scans (like ICC 19.0 so far in
> simd constructs only), we can enable it in PSTL as well.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, additionally tested
> with
> #include <execution>
> #include <numeric>
>
> auto
> foo (std::vector<int> &ca, std::vector<int> &co)
> {
> return std::inclusive_scan(std::execution::unseq, ca.begin(), ca.end(), co.begin());
> }
>
> auto
> bar (std::vector<int> &ca, std::vector<int> &co)
> {
> return std::exclusive_scan(std::execution::unseq, ca.begin(), ca.end(), co.begin(), 0);
> }
> and verifying with -O2 -fopenmp-simd it is vectorized. Ok for trunk?
> Can you push it into upstream PSTL?
>
> 2019-06-21 Jakub Jelinek <jakub@redhat.com>
>
> * include/pstl/pstl_config.h (_PSTL_PRAGMA_SIMD_SCAN,
> _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN, _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN):
> Define to OpenMP 5.0 pragmas even for GCC 10.0+.
> (_PSTL_UDS_PRESENT): Define to 1 for GCC 10.0+.
>
> --- libstdc++-v3/include/pstl/pstl_config.h.jj 2019-06-10 18:18:01.551191212 +0200
> +++ libstdc++-v3/include/pstl/pstl_config.h 2019-06-20 17:03:31.466367344 +0200
> @@ -70,7 +70,7 @@
> # define _PSTL_PRAGMA_FORCEINLINE
> #endif
>
> -#if (__INTEL_COMPILER >= 1900)
> +#if (__INTEL_COMPILER >= 1900) || (_PSTL_GCC_VERSION >= 100000)
> # define _PSTL_PRAGMA_SIMD_SCAN(PRM) _PSTL_PRAGMA(omp simd reduction(inscan, PRM))
> # define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan inclusive(PRM))
> # define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan exclusive(PRM))
> @@ -100,7 +100,11 @@
> # define _PSTL_UDR_PRESENT 0
> #endif
>
> -#define _PSTL_UDS_PRESENT (__INTEL_COMPILER >= 1900 && __INTEL_COMPILER_BUILD_DATE >= 20180626)
> +#if ((__INTEL_COMPILER >= 1900 && __INTEL_COMPILER_BUILD_DATE >= 20180626) || _PSTL_GCC_VERSION >= 100000)
> +# define _PSTL_UDS_PRESENT 1
> +#else
> +# define _PSTL_UDS_PRESENT 0
> +#endif
>
> #if _PSTL_EARLYEXIT_PRESENT
> # define _PSTL_PRAGMA_SIMD_EARLYEXIT _PSTL_PRAGMA(omp simd early_exit)
>
> Jakub
More information about the Gcc-patches
mailing list