@@ -403,56 +403,51 @@ bool is_a_nan<uint16_t>(uint16_t elem)
403403    return  (elem & 0x7c00 ) == 0x7c00 ;
404404}
405405
406+ /*  Specialized template function for 16-bit qsort_ funcs*/ 
406407template  <>
407- void  avx512_qselect (int16_t  * arr, int64_t  k , int64_t  arrsize,  bool  hasnan )
408+ void  qsort_<zmm_vector< int16_t >> (int16_t *  arr, int64_t  left , int64_t  right,  int64_t  maxiters )
408409{
409-     if  (arrsize > 1 ) {
410-         qselect_16bit_<zmm_vector<int16_t >, int16_t >(
411-                 arr, k, 0 , arrsize - 1 , 2  * (int64_t )log2 (arrsize));
412-     }
410+     qsort_16bit_<zmm_vector<int16_t >>(arr, left, right, maxiters);
413411}
414412
415413template  <>
416- void  avx512_qselect (uint16_t  * arr, int64_t  k , int64_t  arrsize,  bool  hasnan )
414+ void  qsort_<zmm_vector< uint16_t >> (uint16_t *  arr, int64_t  left , int64_t  right,  int64_t  maxiters )
417415{
418-     if  (arrsize > 1 ) {
419-         qselect_16bit_<zmm_vector<uint16_t >, uint16_t >(
420-                 arr, k, 0 , arrsize - 1 , 2  * (int64_t )log2 (arrsize));
421-     }
416+     qsort_16bit_<zmm_vector<uint16_t >>(arr, left, right, maxiters);
422417}
423418
424- void  avx512_qselect_fp16 (uint16_t  *arr, int64_t  k,  int64_t   arrsize,  bool  hasnan )
419+ void  avx512_qsort_fp16 (uint16_t  *arr, int64_t  arrsize)
425420{
426-     int64_t  indx_last_elem = arrsize - 1 ;
427-     if  (UNLIKELY (hasnan)) {
428-         indx_last_elem = move_nans_to_end_of_array (arr, arrsize);
429-     }
430-     if  (indx_last_elem >= k) {
431-         qselect_16bit_<zmm_vector<float16>, uint16_t >(
432-                 arr, k, 0 , indx_last_elem, 2  * (int64_t )log2 (indx_last_elem));
421+     if  (arrsize > 1 ) {
422+         int64_t  nan_count = replace_nan_with_inf<zmm_vector<float16>, uint16_t >(arr, arrsize);
423+         qsort_16bit_<zmm_vector<float16>, uint16_t >(
424+                 arr, 0 , arrsize - 1 , 2  * (int64_t )log2 (arrsize));
425+         replace_inf_with_nan (arr, arrsize, nan_count);
433426    }
434427}
435428
429+ /*  Specialized template function for 16-bit qselect_ funcs*/ 
436430template  <>
437- void  qsort_ <zmm_vector<int16_t >>(int16_t * arr, int64_t  left, int64_t  right, int64_t  maxiters)
431+ void  qselect_ <zmm_vector<int16_t >>(int16_t * arr,  int64_t  k , int64_t  left, int64_t  right, int64_t  maxiters)
438432{
439-     qsort_16bit_ <zmm_vector<int16_t >>(arr, left, right, maxiters);
433+     qselect_16bit_ <zmm_vector<int16_t >>(arr, k , left, right, maxiters);
440434}
441435
442436template  <>
443- void  qsort_ <zmm_vector<uint16_t >>(uint16_t * arr, int64_t  left, int64_t  right, int64_t  maxiters)
437+ void  qselect_ <zmm_vector<uint16_t >>(uint16_t * arr,  int64_t  k , int64_t  left, int64_t  right, int64_t  maxiters)
444438{
445-     qsort_16bit_ <zmm_vector<uint16_t >>(arr, left, right, maxiters);
439+     qselect_16bit_ <zmm_vector<uint16_t >>(arr, k , left, right, maxiters);
446440}
447441
448- void  avx512_qsort_fp16 (uint16_t  *arr, int64_t  arrsize)
442+ void  avx512_qselect_fp16 (uint16_t  *arr, int64_t  k,  int64_t   arrsize,  bool  hasnan )
449443{
450-     if  (arrsize > 1 ) {
451-         int64_t  nan_count = replace_nan_with_inf<zmm_vector<float16>, uint16_t >(arr, arrsize);
452-         qsort_16bit_<zmm_vector<float16>, uint16_t >(
453-                 arr, 0 , arrsize - 1 , 2  * (int64_t )log2 (arrsize));
454-         replace_inf_with_nan (arr, arrsize, nan_count);
444+     int64_t  indx_last_elem = arrsize - 1 ;
445+     if  (UNLIKELY (hasnan)) {
446+         indx_last_elem = move_nans_to_end_of_array (arr, arrsize);
447+     }
448+     if  (indx_last_elem >= k) {
449+         qselect_16bit_<zmm_vector<float16>, uint16_t >(
450+                 arr, k, 0 , indx_last_elem, 2  * (int64_t )log2 (indx_last_elem));
455451    }
456452}
457- 
458453#endif  //  AVX512_QSORT_16BIT
0 commit comments