From aca96dad042131f0e2935c7ac0d0248a817024a0 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 18 Nov 2025 13:17:50 -0600 Subject: [PATCH 1/2] Suggested determination of OpenCL Target Version --- configure | 43 ++++++++++++++++++++++++++++--------------- configure.ac | 25 ++++++++++++++++++------- src/Makevars.in | 2 +- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/configure b/configure index bebf75e..28e40e3 100755 --- a/configure +++ b/configure @@ -639,6 +639,7 @@ ac_includes_default="\ ac_header_cxx_list= ac_subst_vars='LTLIBOBJS LIBOBJS +OPENCL_TARGET_VERSION SDKPATH CUDA_HOME CLBLAS_PREFIX @@ -4581,6 +4582,9 @@ CLBLAS_PREFIX="" CUDA_HOME="" SDKPATH="" +## Use common current version on non-macOS systems +OPENCL_TARGET_VERSION=300 + ## ============================================================================= ## OpenCL Detection ## ============================================================================= @@ -4668,6 +4672,10 @@ printf "%s\n" "$as_me: WARNING: You may need to install Xcode Command Line Tools { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Or use CUDA if you have an NVIDIA GPU" >&5 printf "%s\n" "$as_me: WARNING: Or use CUDA if you have an NVIDIA GPU" >&2;} fi + + ## Use minimum version to match OpenCL on macOS + OPENCL_TARGET_VERSION=120 + else ## Linux/Unix: Check for CL/opencl.h header ac_header= ac_cache= @@ -5254,22 +5262,24 @@ fi printf "%s\n" "$as_me: " >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: GPU Backend Configuration Summary:" >&5 printf "%s\n" "$as_me: GPU Backend Configuration Summary:" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Platform: ${RSysinfoName}" >&5 -printf "%s\n" "$as_me: Platform: ${RSysinfoName}" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: C++ Standard: C++14" >&5 -printf "%s\n" "$as_me: C++ Standard: C++14" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenCL: ${HAVE_OPENCL}" >&5 -printf "%s\n" "$as_me: OpenCL: ${HAVE_OPENCL}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Platform: ${RSysinfoName}" >&5 +printf "%s\n" "$as_me: Platform: ${RSysinfoName}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: C++ Standard: C++14" >&5 +printf "%s\n" "$as_me: C++ Standard: C++14" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenCL: ${HAVE_OPENCL}" >&5 +printf "%s\n" "$as_me: OpenCL: ${HAVE_OPENCL}" >&6;} if test "x${HAVE_OPENCL}" = x1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CLBlast: ${HAVE_CLBLAST}" >&5 -printf "%s\n" "$as_me: CLBlast: ${HAVE_CLBLAST}" >&6;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: clBLAS: ${HAVE_CLBLAS}" >&5 -printf "%s\n" "$as_me: clBLAS: ${HAVE_CLBLAS}" >&6;} -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: CUDA: ${HAVE_CUDA}" >&5 -printf "%s\n" "$as_me: CUDA: ${HAVE_CUDA}" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Default: ${DEFAULT_BACKEND}" >&5 -printf "%s\n" "$as_me: Default: ${DEFAULT_BACKEND}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CLBlast: ${HAVE_CLBLAST}" >&5 +printf "%s\n" "$as_me: CLBlast: ${HAVE_CLBLAST}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: clBLAS: ${HAVE_CLBLAS}" >&5 +printf "%s\n" "$as_me: clBLAS: ${HAVE_CLBLAS}" >&6;} +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Target Version: ${OPENCL_TARGET_VERSION}" >&5 +printf "%s\n" "$as_me: Target Version: ${OPENCL_TARGET_VERSION}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: CUDA: ${HAVE_CUDA}" >&5 +printf "%s\n" "$as_me: CUDA: ${HAVE_CUDA}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Default: ${DEFAULT_BACKEND}" >&5 +printf "%s\n" "$as_me: Default: ${DEFAULT_BACKEND}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 printf "%s\n" "$as_me: " >&6;} @@ -5352,6 +5362,9 @@ BANDICOOT_LIBS="${BANDICOOT_LIBS} ${LAPACK_BLAS_LIBS}" +## OpenCL target version + + ac_config_files="$ac_config_files src/Makevars R/flags.R" cat >confcache <<\_ACEOF diff --git a/configure.ac b/configure.ac index 4e52a75..50ae1c5 100644 --- a/configure.ac +++ b/configure.ac @@ -96,6 +96,9 @@ CLBLAS_PREFIX="" CUDA_HOME="" SDKPATH="" +## Use common current version on non-macOS systems +OPENCL_TARGET_VERSION=300 + ## ============================================================================= ## OpenCL Detection ## ============================================================================= @@ -157,6 +160,10 @@ if test x"${is_macos}" = x"yes"; then AC_MSG_WARN([You may need to install Xcode Command Line Tools: xcode-select --install]) AC_MSG_WARN([Or use CUDA if you have an NVIDIA GPU]) fi + + ## Use minimum version to match OpenCL on macOS + OPENCL_TARGET_VERSION=120 + else ## Linux/Unix: Check for CL/opencl.h header AC_CHECK_HEADER([CL/opencl.h], @@ -382,15 +389,16 @@ fi AC_MSG_NOTICE([]) AC_MSG_NOTICE([GPU Backend Configuration Summary:]) -AC_MSG_NOTICE([ Platform: ${RSysinfoName}]) -AC_MSG_NOTICE([ C++ Standard: C++14]) -AC_MSG_NOTICE([ OpenCL: ${HAVE_OPENCL}]) +AC_MSG_NOTICE([ Platform: ${RSysinfoName}]) +AC_MSG_NOTICE([ C++ Standard: C++14]) +AC_MSG_NOTICE([ OpenCL: ${HAVE_OPENCL}]) if test "x${HAVE_OPENCL}" = x1; then - AC_MSG_NOTICE([ CLBlast: ${HAVE_CLBLAST}]) - AC_MSG_NOTICE([ clBLAS: ${HAVE_CLBLAS}]) + AC_MSG_NOTICE([ CLBlast: ${HAVE_CLBLAST}]) + AC_MSG_NOTICE([ clBLAS: ${HAVE_CLBLAS}]) fi -AC_MSG_NOTICE([ CUDA: ${HAVE_CUDA}]) -AC_MSG_NOTICE([ Default: ${DEFAULT_BACKEND}]) +AC_MSG_NOTICE([ Target Version: ${OPENCL_TARGET_VERSION}]) +AC_MSG_NOTICE([ CUDA: ${HAVE_CUDA}]) +AC_MSG_NOTICE([ Default: ${DEFAULT_BACKEND}]) AC_MSG_NOTICE([]) ## ============================================================================= @@ -467,5 +475,8 @@ AC_SUBST([CLBLAS_PREFIX]) AC_SUBST([CUDA_HOME]) AC_SUBST([SDKPATH]) +## OpenCL target version +AC_SUBST([OPENCL_TARGET_VERSION]) + AC_CONFIG_FILES([src/Makevars R/flags.R]) AC_OUTPUT diff --git a/src/Makevars.in b/src/Makevars.in index 9746aff..dde61e5 100644 --- a/src/Makevars.in +++ b/src/Makevars.in @@ -3,7 +3,7 @@ ## This file is processed by configure to generate Makevars ## It includes GPU backend configuration (OpenCL, CUDA) and other settings -PKG_CPPFLAGS = -I../inst/include +PKG_CPPFLAGS = -I../inst/include -DCL_TARGET_OPENCL_VERSION=@OPENCL_TARGET_VERSION@ ## Compiler flags from configure PKG_CXXFLAGS = @BANDICOOT_CXXFLAGS@ @OPENMP_CXXFLAGS@ From 50775ecfa6868c7215d0c9588c6fec1fedd4d959 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 18 Nov 2025 13:42:50 -0600 Subject: [PATCH 2/2] Tweaks based on code review --- configure | 34 +++++++++++++++++----------------- configure.ac | 16 ++++++++-------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/configure b/configure index 28e40e3..d374245 100755 --- a/configure +++ b/configure @@ -5262,24 +5262,24 @@ fi printf "%s\n" "$as_me: " >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: GPU Backend Configuration Summary:" >&5 printf "%s\n" "$as_me: GPU Backend Configuration Summary:" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Platform: ${RSysinfoName}" >&5 -printf "%s\n" "$as_me: Platform: ${RSysinfoName}" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: C++ Standard: C++14" >&5 -printf "%s\n" "$as_me: C++ Standard: C++14" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenCL: ${HAVE_OPENCL}" >&5 -printf "%s\n" "$as_me: OpenCL: ${HAVE_OPENCL}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Platform: ${RSysinfoName}" >&5 +printf "%s\n" "$as_me: Platform: ${RSysinfoName}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: C++ Standard: C++14" >&5 +printf "%s\n" "$as_me: C++ Standard: C++14" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenCL: ${HAVE_OPENCL}" >&5 +printf "%s\n" "$as_me: OpenCL: ${HAVE_OPENCL}" >&6;} if test "x${HAVE_OPENCL}" = x1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CLBlast: ${HAVE_CLBLAST}" >&5 -printf "%s\n" "$as_me: CLBlast: ${HAVE_CLBLAST}" >&6;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: clBLAS: ${HAVE_CLBLAS}" >&5 -printf "%s\n" "$as_me: clBLAS: ${HAVE_CLBLAS}" >&6;} -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Target Version: ${OPENCL_TARGET_VERSION}" >&5 -printf "%s\n" "$as_me: Target Version: ${OPENCL_TARGET_VERSION}" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: CUDA: ${HAVE_CUDA}" >&5 -printf "%s\n" "$as_me: CUDA: ${HAVE_CUDA}" >&6;} -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Default: ${DEFAULT_BACKEND}" >&5 -printf "%s\n" "$as_me: Default: ${DEFAULT_BACKEND}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CLBlast: ${HAVE_CLBLAST}" >&5 +printf "%s\n" "$as_me: CLBlast: ${HAVE_CLBLAST}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: clBLAS: ${HAVE_CLBLAS}" >&5 +printf "%s\n" "$as_me: clBLAS: ${HAVE_CLBLAS}" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenCL Target: ${OPENCL_TARGET_VERSION}" >&5 +printf "%s\n" "$as_me: OpenCL Target: ${OPENCL_TARGET_VERSION}" >&6;} +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: CUDA: ${HAVE_CUDA}" >&5 +printf "%s\n" "$as_me: CUDA: ${HAVE_CUDA}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Default: ${DEFAULT_BACKEND}" >&5 +printf "%s\n" "$as_me: Default: ${DEFAULT_BACKEND}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 printf "%s\n" "$as_me: " >&6;} diff --git a/configure.ac b/configure.ac index 50ae1c5..81d6ab9 100644 --- a/configure.ac +++ b/configure.ac @@ -389,16 +389,16 @@ fi AC_MSG_NOTICE([]) AC_MSG_NOTICE([GPU Backend Configuration Summary:]) -AC_MSG_NOTICE([ Platform: ${RSysinfoName}]) -AC_MSG_NOTICE([ C++ Standard: C++14]) -AC_MSG_NOTICE([ OpenCL: ${HAVE_OPENCL}]) +AC_MSG_NOTICE([ Platform: ${RSysinfoName}]) +AC_MSG_NOTICE([ C++ Standard: C++14]) +AC_MSG_NOTICE([ OpenCL: ${HAVE_OPENCL}]) if test "x${HAVE_OPENCL}" = x1; then - AC_MSG_NOTICE([ CLBlast: ${HAVE_CLBLAST}]) - AC_MSG_NOTICE([ clBLAS: ${HAVE_CLBLAS}]) + AC_MSG_NOTICE([ CLBlast: ${HAVE_CLBLAST}]) + AC_MSG_NOTICE([ clBLAS: ${HAVE_CLBLAS}]) + AC_MSG_NOTICE([ OpenCL Target: ${OPENCL_TARGET_VERSION}]) fi -AC_MSG_NOTICE([ Target Version: ${OPENCL_TARGET_VERSION}]) -AC_MSG_NOTICE([ CUDA: ${HAVE_CUDA}]) -AC_MSG_NOTICE([ Default: ${DEFAULT_BACKEND}]) +AC_MSG_NOTICE([ CUDA: ${HAVE_CUDA}]) +AC_MSG_NOTICE([ Default: ${DEFAULT_BACKEND}]) AC_MSG_NOTICE([]) ## =============================================================================