Skip to content

Commit 3e6a12f

Browse files
authored
Merge pull request #6553 from STEllAR-GROUP/fix-omp-pragma-errors
Fix omp vectorization pragma errors
2 parents 1ed28bc + 90b21d4 commit 3e6a12f

File tree

6 files changed

+69
-71
lines changed

6 files changed

+69
-71
lines changed

.jenkins/lsu/env-clang-17.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module load openmpi
1515
export HPXRUN_RUNWRAPPER=srun
1616
export CXX_STD="20"
1717
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
18+
export CXXFLAGS="-fopenmp -Wno-pass-failed ${CXXFLAGS}"
1819

1920
configure_extra_options+=" -DCMAKE_BUILD_TYPE=${build_type}"
2021
configure_extra_options+=" -DHPX_WITH_CXX_STANDARD=${CXX_STD}"

.jenkins/lsu/env-gcc-13.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module load openmpi
1515
export HPXRUN_RUNWRAPPER=srun
1616
export CXX_STD="20"
1717
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
18+
export CXXFLAGS="-fopenmp ${CXXFLAGS}"
1819

1920
configure_extra_options+=" -DHPX_WITH_CXX_STANDARD=${CXX_STD}"
2021
configure_extra_options+=" -DHPX_WITH_MALLOC=system"

libs/core/algorithms/include/hpx/parallel/unseq/loop.hpp

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace hpx::parallel::util {
2626
struct unseq_loop_n
2727
{
2828
template <typename InIter, typename F>
29-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr InIter call(
29+
HPX_HOST_DEVICE HPX_FORCEINLINE static InIter call(
3030
InIter HPX_RESTRICT it, std::size_t num, F&& f)
3131
{
3232
// clang-format off
@@ -135,10 +135,9 @@ namespace hpx::parallel::util {
135135
struct unseq_loop2
136136
{
137137
template <typename InIter1, typename InIter2, typename F>
138-
HPX_HOST_DEVICE
139-
HPX_FORCEINLINE static constexpr std::pair<InIter1, InIter2>
140-
call(InIter1 HPX_RESTRICT it1, InIter1 HPX_RESTRICT last1,
141-
InIter2 HPX_RESTRICT it2, F&& f)
138+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::pair<InIter1, InIter2>
139+
call(InIter1 HPX_RESTRICT it1, InIter1 HPX_RESTRICT last1,
140+
InIter2 HPX_RESTRICT it2, F&& f)
142141
{
143142
constexpr bool iterators_are_random_access =
144143
hpx::traits::is_random_access_iterator_v<InIter1> &&
@@ -216,19 +215,18 @@ namespace hpx::parallel::util {
216215

217216
// clang-format off
218217
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
219-
for (std::size_t i = 0; i < count;
220-
(void) ++it, i += 4) // -V112
218+
for (std::size_t i = 0; i < count; i += 4) // -V112
221219
{
222-
HPX_INVOKE(f, it);
223-
HPX_INVOKE(f, ++it);
224-
HPX_INVOKE(f, ++it);
225-
HPX_INVOKE(f, ++it);
220+
HPX_INVOKE(f, it++);
221+
HPX_INVOKE(f, it++);
222+
HPX_INVOKE(f, it++);
223+
HPX_INVOKE(f, it++);
226224
}
227225

228226
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
229-
for (/**/; count < num; (void) ++count, ++it)
227+
for (std::size_t i = count; i < num; ++i)
230228
{
231-
HPX_INVOKE(f, it);
229+
HPX_INVOKE(f, it++);
232230
}
233231
// clang-format on
234232

@@ -256,19 +254,18 @@ namespace hpx::parallel::util {
256254

257255
// clang-format off
258256
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
259-
for (std::size_t i = 0; i < count; (void) ++it, ++dest,
260-
i += 4) // -V112
257+
for (std::size_t i = 0; i < count; i += 4) // -V112
261258
{
262-
HPX_INVOKE(f, it, dest);
263-
HPX_INVOKE(f, ++it, ++dest);
264-
HPX_INVOKE(f, ++it, ++dest);
265-
HPX_INVOKE(f, ++it, ++dest);
259+
HPX_INVOKE(f, it++, dest++);
260+
HPX_INVOKE(f, it++, dest++);
261+
HPX_INVOKE(f, it++, dest++);
262+
HPX_INVOKE(f, it++, dest++);
266263
}
267264

268265
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
269-
for (/**/; count < num; (void) ++count, ++it, ++dest)
266+
for (std::size_t i = count; i < num; ++i)
270267
{
271-
HPX_INVOKE(f, it, dest);
268+
HPX_INVOKE(f, it++, dest++);
272269
}
273270
//clang-format on
274271

libs/core/algorithms/include/hpx/parallel/unseq/reduce_helpers.hpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ namespace hpx::parallel::util::detail {
8585
{
8686
#if defined(HPX_HAVE_VECTOR_REDUCTION)
8787
template <typename Iter1, typename T, typename Convert, typename Reduce>
88-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
88+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
8989
is_arithmetic_plus_reduction_v<T, Reduce>, T>
9090
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
9191
{
@@ -99,7 +99,7 @@ namespace hpx::parallel::util::detail {
9999
}
100100

101101
template <typename Iter1, typename T, typename Convert, typename Reduce>
102-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
102+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
103103
is_arithmetic_minus_reduction_v<T, Reduce>, T>
104104
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
105105
{
@@ -113,7 +113,7 @@ namespace hpx::parallel::util::detail {
113113
}
114114

115115
template <typename Iter1, typename T, typename Convert, typename Reduce>
116-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
116+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
117117
is_arithmetic_multiplies_reduction_v<T, Reduce>, T>
118118
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
119119
{
@@ -127,7 +127,7 @@ namespace hpx::parallel::util::detail {
127127
}
128128

129129
template <typename Iter1, typename T, typename Convert, typename Reduce>
130-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
130+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
131131
is_arithmetic_bit_and_reduction_v<T, Reduce>, T>
132132
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
133133
{
@@ -141,7 +141,7 @@ namespace hpx::parallel::util::detail {
141141
}
142142

143143
template <typename Iter1, typename T, typename Convert, typename Reduce>
144-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
144+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
145145
is_arithmetic_bit_or_reduction_v<T, Reduce>, T>
146146
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
147147
{
@@ -155,7 +155,7 @@ namespace hpx::parallel::util::detail {
155155
}
156156

157157
template <typename Iter1, typename T, typename Convert, typename Reduce>
158-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
158+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
159159
is_arithmetic_bit_xor_reduction_v<T, Reduce>, T>
160160
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
161161
{
@@ -169,7 +169,7 @@ namespace hpx::parallel::util::detail {
169169
}
170170

171171
template <typename Iter1, typename T, typename Convert, typename Reduce>
172-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
172+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
173173
is_arithmetic_logical_and_reduction_v<T, Reduce>, T>
174174
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
175175
{
@@ -183,7 +183,7 @@ namespace hpx::parallel::util::detail {
183183
}
184184

185185
template <typename Iter1, typename T, typename Convert, typename Reduce>
186-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
186+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
187187
is_arithmetic_logical_or_reduction_v<T, Reduce>, T>
188188
reduce(Iter1 it, std::size_t count, T init, Reduce /* */, Convert conv)
189189
{
@@ -197,7 +197,7 @@ namespace hpx::parallel::util::detail {
197197
}
198198
#endif
199199
template <typename Iter1, typename T, typename Convert, typename Reduce>
200-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
200+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
201201
is_not_omp_reduction_v<T, Reduce>, T>
202202
reduce(Iter1 it, std::size_t count, T init, Reduce r, Convert conv)
203203
{
@@ -274,7 +274,7 @@ namespace hpx::parallel::util::detail {
274274
#if defined(HPX_HAVE_VECTOR_REDUCTION)
275275
template <typename Iter1, typename Iter2, typename T, typename Convert,
276276
typename Reduce>
277-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
277+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
278278
is_arithmetic_plus_reduction_v<T, Reduce>, T>
279279
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
280280
Convert conv)
@@ -290,7 +290,7 @@ namespace hpx::parallel::util::detail {
290290

291291
template <typename Iter1, typename Iter2, typename T, typename Convert,
292292
typename Reduce>
293-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
293+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
294294
is_arithmetic_minus_reduction_v<T, Reduce>, T>
295295
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
296296
Convert conv)
@@ -306,7 +306,7 @@ namespace hpx::parallel::util::detail {
306306

307307
template <typename Iter1, typename Iter2, typename T, typename Convert,
308308
typename Reduce>
309-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
309+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
310310
is_arithmetic_multiplies_reduction_v<T, Reduce>, T>
311311
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
312312
Convert conv)
@@ -322,7 +322,7 @@ namespace hpx::parallel::util::detail {
322322

323323
template <typename Iter1, typename Iter2, typename T, typename Convert,
324324
typename Reduce>
325-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
325+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
326326
is_arithmetic_bit_and_reduction_v<T, Reduce>, T>
327327
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
328328
Convert conv)
@@ -338,7 +338,7 @@ namespace hpx::parallel::util::detail {
338338

339339
template <typename Iter1, typename Iter2, typename T, typename Convert,
340340
typename Reduce>
341-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
341+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
342342
is_arithmetic_bit_or_reduction_v<T, Reduce>, T>
343343
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
344344
Convert conv)
@@ -370,7 +370,7 @@ namespace hpx::parallel::util::detail {
370370

371371
template <typename Iter1, typename Iter2, typename T, typename Convert,
372372
typename Reduce>
373-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
373+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
374374
is_arithmetic_logical_and_reduction_v<T, Reduce>, T>
375375
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
376376
Convert conv)
@@ -386,7 +386,7 @@ namespace hpx::parallel::util::detail {
386386

387387
template <typename Iter1, typename Iter2, typename T, typename Convert,
388388
typename Reduce>
389-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
389+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
390390
is_arithmetic_logical_or_reduction_v<T, Reduce>, T>
391391
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce /* */,
392392
Convert conv)
@@ -402,7 +402,7 @@ namespace hpx::parallel::util::detail {
402402
#endif
403403
template <typename Iter1, typename Iter2, typename T, typename Convert,
404404
typename Reduce>
405-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr std::enable_if_t<
405+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::enable_if_t<
406406
is_not_omp_reduction_v<T, Reduce>, T>
407407
reduce(Iter1 it1, Iter2 it2, std::size_t count, T init, Reduce r,
408408
Convert conv)

libs/core/algorithms/include/hpx/parallel/unseq/transform_loop.hpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ namespace hpx::parallel::util {
2525
struct unseq_transform_loop_n
2626
{
2727
template <typename InIter, typename OutIter, typename F>
28-
HPX_HOST_DEVICE
29-
HPX_FORCEINLINE static constexpr std::pair<InIter, OutIter>
30-
call(InIter HPX_RESTRICT it, std::size_t num,
31-
OutIter HPX_RESTRICT dest, F&& f)
28+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::pair<InIter, OutIter>
29+
call(InIter HPX_RESTRICT it, std::size_t num,
30+
OutIter HPX_RESTRICT dest, F&& f)
3231
{
3332
constexpr bool iterators_are_random_access =
3433
hpx::traits::is_random_access_iterator_v<InIter> &&
@@ -75,10 +74,9 @@ namespace hpx::parallel::util {
7574
struct unseq_transform_loop_n_ind
7675
{
7776
template <typename InIter, typename OutIter, typename F>
78-
HPX_HOST_DEVICE
79-
HPX_FORCEINLINE static constexpr std::pair<InIter, OutIter>
80-
call(InIter HPX_RESTRICT it, std::size_t num,
81-
OutIter HPX_RESTRICT dest, F&& f)
77+
HPX_HOST_DEVICE HPX_FORCEINLINE static std::pair<InIter, OutIter>
78+
call(InIter HPX_RESTRICT it, std::size_t num,
79+
OutIter HPX_RESTRICT dest, F&& f)
8280
{
8381
constexpr bool iterators_are_random_access =
8482
hpx::traits::is_random_access_iterator_v<InIter> &&
@@ -240,10 +238,11 @@ namespace hpx::parallel::util {
240238
{
241239
template <typename InIter1, typename InIter2, typename OutIter,
242240
typename F>
243-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr hpx::tuple<InIter1,
244-
InIter2, OutIter>
245-
call(InIter1 HPX_RESTRICT first1, std::size_t num,
246-
InIter2 HPX_RESTRICT first2, OutIter HPX_RESTRICT dest, F&& f)
241+
HPX_HOST_DEVICE
242+
HPX_FORCEINLINE static hpx::tuple<InIter1, InIter2, OutIter>
243+
call(InIter1 HPX_RESTRICT first1, std::size_t num,
244+
InIter2 HPX_RESTRICT first2, OutIter HPX_RESTRICT dest,
245+
F&& f)
247246
{
248247
constexpr bool iterators_are_random_access =
249248
hpx::traits::is_random_access_iterator_v<InIter1> &&
@@ -401,10 +400,11 @@ namespace hpx::parallel::util {
401400
{
402401
template <typename InIter1, typename InIter2, typename OutIter,
403402
typename F>
404-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr hpx::tuple<InIter1,
405-
InIter2, OutIter>
406-
call(InIter1 HPX_RESTRICT first1, std::size_t num,
407-
InIter2 HPX_RESTRICT first2, OutIter HPX_RESTRICT dest, F&& f)
403+
HPX_HOST_DEVICE
404+
HPX_FORCEINLINE static hpx::tuple<InIter1, InIter2, OutIter>
405+
call(InIter1 HPX_RESTRICT first1, std::size_t num,
406+
InIter2 HPX_RESTRICT first2, OutIter HPX_RESTRICT dest,
407+
F&& f)
408408
{
409409
constexpr bool iterators_are_random_access =
410410
hpx::traits::is_random_access_iterator_v<InIter1> &&

libs/core/algorithms/include/hpx/parallel/util/loop.hpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ namespace hpx::parallel::util {
5858
HPX_CONCEPT_REQUIRES_( // forces hpx::execution::unseq
5959
hpx::is_unsequenced_execution_policy_v<ExPolicy> &&
6060
!hpx::is_parallel_execution_policy_v<ExPolicy>)>
61-
HPX_HOST_DEVICE HPX_FORCEINLINE static constexpr Begin call(
61+
HPX_HOST_DEVICE HPX_FORCEINLINE static Begin call(
6262
ExPolicy&&, Begin it, End end, F&& f)
6363
{
6464
// clang-format off
6565
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
66-
for (/**/; it != end; ++it)
66+
for (Begin& iter = it; iter != end; ++iter)
6767
{
68-
HPX_INVOKE(f, it);
68+
HPX_INVOKE(f, iter);
6969
}
7070
// clang-format on
7171

@@ -695,8 +695,9 @@ namespace hpx::parallel::util {
695695
{
696696
// clang-format off
697697
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
698-
for (/**/; it != last; (void) ++it)
699-
HPX_INVOKE(f, it);
698+
for (FwdIter& iter = it; iter != last; ++iter){
699+
HPX_INVOKE(f, iter);
700+
}
700701
// clang-format on
701702

702703
return it;
@@ -721,8 +722,8 @@ namespace hpx::parallel::util {
721722
{
722723
// clang-format off
723724
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
724-
for (/**/; it != last; (void) ++it, ++dest)
725-
f(it, dest);
725+
for (Iter& iter = it; iter != last; ++iter)
726+
f(iter, dest++);
726727
// clang-format on
727728

728729
return dest;
@@ -913,16 +914,15 @@ namespace hpx::parallel::util {
913914

914915
// clang-format off
915916
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
916-
for (std::size_t i = 0; i < count;
917-
(void) ++it, ++dest, ++i) // -V112
917+
for (std::size_t i = 0; i < count; ++i) // -V112
918918
{
919-
HPX_INVOKE(f, it, dest);
919+
HPX_INVOKE(f, it++, dest++);
920920
}
921921

922922
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
923-
for (/**/; count < num; (void) ++count, ++it, ++dest)
923+
for (std::size_t i = count; i < num; ++i)
924924
{
925-
HPX_INVOKE(f, it, dest);
925+
HPX_INVOKE(f, it++, dest++);
926926
}
927927
// clang-format on
928928

@@ -950,16 +950,15 @@ namespace hpx::parallel::util {
950950

951951
// clang-format off
952952
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
953-
for (std::size_t i = 0; i < count;
954-
(void) ++it, ++i) // -V112
953+
for (std::size_t i = 0; i < count; ++i) // -V112
955954
{
956-
HPX_INVOKE(f, it);
955+
HPX_INVOKE(f, it++);
957956
}
958957

959958
HPX_IVDEP HPX_UNROLL HPX_VECTORIZE
960-
for (/**/; count < num; (void) ++count, ++it)
959+
for (std::size_t i = count; i < num; ++i)
961960
{
962-
HPX_INVOKE(f, it);
961+
HPX_INVOKE(f, it++);
963962
}
964963
// clang-format on
965964

0 commit comments

Comments
 (0)