Skip to content

Commit 5c81fb1

Browse files
committed
Adds a GitHub CI step for OpenMP and some formatting changes
1 parent 71a9cfa commit 5c81fb1

File tree

2 files changed

+80
-28
lines changed

2 files changed

+80
-28
lines changed

.github/workflows/c-cpp.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,38 @@ jobs:
135135
- name: Run test suite on SPR
136136
run: sde -spr -- ./builddir/testexe
137137

138+
SKX-SKL-openmp:
139+
140+
runs-on: intel-ubuntu-latest
141+
142+
steps:
143+
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
144+
145+
- name: Install dependencies
146+
run: |
147+
sudo apt update
148+
sudo apt -y install g++-10 libgtest-dev meson curl git
149+
150+
- name: Install Intel SDE
151+
run: |
152+
curl -o /tmp/sde.tar.xz https://downloadmirror.intel.com/784319/sde-external-9.24.0-2023-07-13-lin.tar.xz
153+
mkdir /tmp/sde && tar -xvf /tmp/sde.tar.xz -C /tmp/sde/
154+
sudo mv /tmp/sde/* /opt/sde && sudo ln -s /opt/sde/sde64 /usr/bin/sde
155+
156+
- name: Build
157+
env:
158+
CXX: g++-10
159+
run: |
160+
make clean
161+
meson setup -Dbuild_tests=true -Duse_openmp=true --warnlevel 2 --werror --buildtype release builddir
162+
cd builddir
163+
ninja
164+
165+
- name: Run test suite on SKX and SKL
166+
run: |
167+
sde -skx -- ./builddir/testexe
168+
sde -skl -- ./builddir/testexe
169+
138170
SPR-gcc13-special-cases:
139171

140172
runs-on: intel-ubuntu-latest

src/xss-common-keyvaluesort.hpp

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -393,29 +393,46 @@ X86_SIMD_SORT_INLINE void kvsort_(type1_t *keys,
393393
arrsize_t pivot_index = kvpartition_unrolled<vtype1, vtype2, 4>(
394394
keys, indexes, left, right + 1, pivot, &smallest, &biggest);
395395

396-
397396
#if defined(XSS_USE_OPENMP) && defined(_OPENMP)
398397
if (pivot != smallest) {
399-
bool parallelLeft = (pivot_index - left) > task_threshold;
400-
if (parallelLeft){
401-
#pragma omp task if(parallelLeft)
402-
kvsort_<vtype1, vtype2>(
403-
keys, indexes, left, pivot_index - 1, max_iters - 1, task_threshold);
404-
}else{
405-
kvsort_<vtype1, vtype2>(
406-
keys, indexes, left, pivot_index - 1, max_iters - 1, task_threshold);
398+
bool parallel_left = (pivot_index - left) > task_threshold;
399+
if (parallel_left) {
400+
#pragma omp task
401+
kvsort_<vtype1, vtype2>(keys,
402+
indexes,
403+
left,
404+
pivot_index - 1,
405+
max_iters - 1,
406+
task_threshold);
407+
}
408+
else {
409+
kvsort_<vtype1, vtype2>(keys,
410+
indexes,
411+
left,
412+
pivot_index - 1,
413+
max_iters - 1,
414+
task_threshold);
407415
}
408416
}
409417
if (pivot != biggest) {
410-
bool parallelRight = (right - pivot_index) > task_threshold;
411-
412-
if (parallelRight){
413-
#pragma omp task if(parallelRight)
414-
kvsort_<vtype1, vtype2>(
415-
keys, indexes, pivot_index, right, max_iters - 1, task_threshold);
416-
}else{
417-
kvsort_<vtype1, vtype2>(
418-
keys, indexes, pivot_index, right, max_iters - 1, task_threshold);
418+
bool parallel_right = (right - pivot_index) > task_threshold;
419+
420+
if (parallel_right) {
421+
#pragma omp task
422+
kvsort_<vtype1, vtype2>(keys,
423+
indexes,
424+
pivot_index,
425+
right,
426+
max_iters - 1,
427+
task_threshold);
428+
}
429+
else {
430+
kvsort_<vtype1, vtype2>(keys,
431+
indexes,
432+
pivot_index,
433+
right,
434+
max_iters - 1,
435+
task_threshold);
419436
}
420437
}
421438
#else
@@ -518,19 +535,22 @@ X86_SIMD_SORT_INLINE void xss_qsort_kv(
518535
}
519536

520537
#if defined(XSS_USE_OPENMP) && defined(_OPENMP)
521-
bool useParallel = arrsize > 10000;
522-
arrsize_t taskThreshold = std::max((arrsize_t) 10000, arrsize / 100);
523-
if (useParallel){
524-
#pragma omp parallel
525-
#pragma omp single
526-
kvsort_<keytype, valtype>(keys, indexes, 0, arrsize - 1, maxiters, taskThreshold);
527-
}else{
528-
kvsort_<keytype, valtype>(keys, indexes, 0, arrsize - 1, maxiters, taskThreshold);
538+
bool use_parallel = arrsize > 10000;
539+
arrsize_t task_threshold = std::max((arrsize_t)10000, arrsize / 100);
540+
if (use_parallel) {
541+
#pragma omp parallel
542+
#pragma omp single
543+
kvsort_<keytype, valtype>(
544+
keys, indexes, 0, arrsize - 1, maxiters, task_threshold);
545+
}
546+
else {
547+
kvsort_<keytype, valtype>(
548+
keys, indexes, 0, arrsize - 1, maxiters, task_threshold);
529549
}
530550
#else
531551
kvsort_<keytype, valtype>(keys, indexes, 0, arrsize - 1, maxiters, 0);
532-
#endif
533-
552+
#endif
553+
534554
replace_inf_with_nan(keys, arrsize, nan_count);
535555

536556
if (descending) {

0 commit comments

Comments
 (0)