@@ -393,29 +393,46 @@ X86_SIMD_SORT_INLINE void kvsort_(type1_t *keys,
393
393
arrsize_t pivot_index = kvpartition_unrolled<vtype1, vtype2, 4 >(
394
394
keys, indexes, left, right + 1 , pivot, &smallest, &biggest);
395
395
396
-
397
396
#if defined(XSS_USE_OPENMP) && defined(_OPENMP)
398
397
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);
407
415
}
408
416
}
409
417
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);
419
436
}
420
437
}
421
438
#else
@@ -518,19 +535,22 @@ X86_SIMD_SORT_INLINE void xss_qsort_kv(
518
535
}
519
536
520
537
#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);
529
549
}
530
550
#else
531
551
kvsort_<keytype, valtype>(keys, indexes, 0 , arrsize - 1 , maxiters, 0 );
532
- #endif
533
-
552
+ #endif
553
+
534
554
replace_inf_with_nan (keys, arrsize, nan_count);
535
555
536
556
if (descending) {
0 commit comments