Skip to content

Commit 805cde3

Browse files
authored
[R] Add prefetcher args if supported (#11124)
1 parent b4aa479 commit 805cde3

File tree

3 files changed

+100
-4
lines changed

3 files changed

+100
-4
lines changed

R-package/configure

+66-4
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,8 @@ ac_includes_default="\
646646
ac_header_cxx_list=
647647
ac_subst_vars='LTLIBOBJS
648648
LIBOBJS
649+
XGBOOST_MM_PREFETCH_PRESENT
650+
XGBOOST_BUILTIN_PREFETCH_PRESENT
649651
BACKTRACE_LIB
650652
DMLC_DEFS
651653
ENDIAN_FLAG
@@ -2794,11 +2796,11 @@ if test x$ac_prog_cxx_stdcxx = xno
27942796
then :
27952797
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
27962798
printf %s "checking for $CXX option to enable C++11 features... " >&6; }
2797-
if test ${ac_cv_prog_cxx_11+y}
2799+
if test ${ac_cv_prog_cxx_cxx11+y}
27982800
then :
27992801
printf %s "(cached) " >&6
28002802
else $as_nop
2801-
ac_cv_prog_cxx_11=no
2803+
ac_cv_prog_cxx_cxx11=no
28022804
ac_save_CXX=$CXX
28032805
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
28042806
/* end confdefs.h. */
@@ -2840,11 +2842,11 @@ if test x$ac_prog_cxx_stdcxx = xno
28402842
then :
28412843
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
28422844
printf %s "checking for $CXX option to enable C++98 features... " >&6; }
2843-
if test ${ac_cv_prog_cxx_98+y}
2845+
if test ${ac_cv_prog_cxx_cxx98+y}
28442846
then :
28452847
printf %s "(cached) " >&6
28462848
else $as_nop
2847-
ac_cv_prog_cxx_98=no
2849+
ac_cv_prog_cxx_cxx98=no
28482850
ac_save_CXX=$CXX
28492851
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
28502852
/* end confdefs.h. */
@@ -3238,6 +3240,64 @@ printf "%s\n" "$as_me: Forcing endianness to: ${USE_LITTLE_ENDIAN}" >&6;}
32383240

32393241
fi
32403242

3243+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking for prefetch builtin" >&5
3244+
printf "%s\n" "$as_me: Checking for prefetch builtin" >&6;}
3245+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3246+
/* end confdefs.h. */
3247+
3248+
int
3249+
main (void)
3250+
{
3251+
__builtin_prefetch
3252+
3253+
;
3254+
return 0;
3255+
}
3256+
_ACEOF
3257+
if ac_fn_cxx_try_link "$LINENO"
3258+
then :
3259+
XGBOOST_BUILTIN_PREFETCH_PRESENT="-DXGBOOST_BUILTIN_PREFETCH_PRESENT=1"
3260+
else $as_nop
3261+
XGBOOST_BUILTIN_PREFETCH_PRESENT=""
3262+
3263+
fi
3264+
rm -f core conftest.err conftest.$ac_objext conftest.beam \
3265+
conftest$ac_exeext conftest.$ac_ext
3266+
if [ "$XGBOOST_BUILTIN_PREFETCH_PRESENT" = "" ]; then
3267+
echo "Has __builtin_prefetch"
3268+
else
3269+
echo "Doesn't have __builtin_prefetch"
3270+
fi
3271+
3272+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking for mm_prefetch" >&5
3273+
printf "%s\n" "$as_me: Checking for mm_prefetch" >&6;}
3274+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3275+
/* end confdefs.h. */
3276+
#include <xmmintrin.h>
3277+
int
3278+
main (void)
3279+
{
3280+
_mm_prefetch
3281+
3282+
;
3283+
return 0;
3284+
}
3285+
_ACEOF
3286+
if ac_fn_cxx_try_link "$LINENO"
3287+
then :
3288+
XGBOOST_MM_PREFETCH_PRESENT="-DXGBOOST_MM_PREFETCH_PRESENT=1"
3289+
else $as_nop
3290+
XGBOOST_MM_PREFETCH_PRESENT=""
3291+
3292+
fi
3293+
rm -f core conftest.err conftest.$ac_objext conftest.beam \
3294+
conftest$ac_exeext conftest.$ac_ext
3295+
if [ "$XGBOOST_MM_PREFETCH_PRESENT" = "" ]; then
3296+
echo "Has _mm_prefetch"
3297+
else
3298+
echo "Doesn't have _mm_prefetch"
3299+
fi
3300+
32413301
OPENMP_CXXFLAGS=""
32423302

32433303
if test `uname -s` = "Linux"
@@ -3289,6 +3349,8 @@ fi
32893349

32903350

32913351

3352+
3353+
32923354
ac_config_files="$ac_config_files src/Makevars"
32933355

32943356
ac_config_headers="$ac_config_headers config.h"

R-package/configure.ac

+32
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,36 @@ AS_IF([test -z "${USE_LITTLE_ENDIAN+x}"], [
5050
ENDIAN_FLAG="-DDMLC_CMAKE_LITTLE_ENDIAN=${USE_LITTLE_ENDIAN}"
5151
])
5252

53+
AC_MSG_NOTICE([Checking for prefetch builtin])
54+
AC_LINK_IFELSE(
55+
[AC_LANG_PROGRAM(
56+
[],
57+
[__builtin_prefetch]
58+
)],
59+
[XGBOOST_BUILTIN_PREFETCH_PRESENT="-DXGBOOST_BUILTIN_PREFETCH_PRESENT=1"],
60+
[XGBOOST_BUILTIN_PREFETCH_PRESENT=""]
61+
)
62+
if [[ "$XGBOOST_BUILTIN_PREFETCH_PRESENT" = "" ]]; then
63+
echo "Has __builtin_prefetch"
64+
else
65+
echo "Doesn't have __builtin_prefetch"
66+
fi
67+
68+
AC_MSG_NOTICE([Checking for mm_prefetch])
69+
AC_LINK_IFELSE(
70+
[AC_LANG_PROGRAM(
71+
[#include <xmmintrin.h>],
72+
[_mm_prefetch]
73+
)],
74+
[XGBOOST_MM_PREFETCH_PRESENT="-DXGBOOST_MM_PREFETCH_PRESENT=1"],
75+
[XGBOOST_MM_PREFETCH_PRESENT=""]
76+
)
77+
if [[ "$XGBOOST_MM_PREFETCH_PRESENT" = "" ]]; then
78+
echo "Has _mm_prefetch"
79+
else
80+
echo "Doesn't have _mm_prefetch"
81+
fi
82+
5383
OPENMP_CXXFLAGS=""
5484

5585
if test `uname -s` = "Linux"
@@ -89,6 +119,8 @@ AC_SUBST(OPENMP_LIB)
89119
AC_SUBST(ENDIAN_FLAG)
90120
AC_SUBST(DMLC_DEFS)
91121
AC_SUBST(BACKTRACE_LIB)
122+
AC_SUBST(XGBOOST_BUILTIN_PREFETCH_PRESENT)
123+
AC_SUBST(XGBOOST_MM_PREFETCH_PRESENT)
92124
AC_CONFIG_FILES([src/Makevars])
93125
AC_CONFIG_HEADERS([config.h])
94126
AC_OUTPUT

R-package/src/Makevars.in

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ CXX_STD = CXX17
77

88
XGB_RFLAGS = \
99
@DMLC_DEFS@ \
10+
@XGBOOST_BUILTIN_PREFETCH_PRESENT@ \
11+
@XGBOOST_MM_PREFETCH_PRESENT@ \
1012
-DXGBOOST_STRICT_R_MODE=1 \
1113
-DDMLC_LOG_BEFORE_THROW=0 \
1214
-DDMLC_ENABLE_STD_THREAD=$(ENABLE_STD_THREAD) \

0 commit comments

Comments
 (0)