CRAN resubmission addressing reviewer feedback on 0.8.0.
inst/configure-templates/ (configure, configure.win, README) and
exports use_opencl_configure(), port_to_opencl_configure() for
CRAN-safe optional OpenCL builds in downstream packages.nmathopencl re-exports both helpers; templates resolve from the
opencltools installation.glmbayes (>= 0.9.3) to Suggests (reference downstream application on CRAN).\value documentation for kernel_lib_subset_printing S3 methods
(print.nmathopencl_concatenated_lib, print.nmathopencl_lib_extract_df):
side-effect printing with invisible return of x, and description of output
classes.load_kernel_source(), load_kernel_library(), and
load_library_for_kernel() C++ implementations are compiled on every
build (not only when USE_OPENCL is defined): reading and concatenating
.cl files is file I/O, not OpenCL API use.has_opencl() checks and stop() from the R wrappers; empty
reads return "" with a message() instead of failing on CPU-only
binaries.has_opencl() remains the signal for whether this binary can run
downstream GPU code; downstream packages should gate dispatch, not
loading kernel text.\donttest{} and remove if (has_opencl()) from examples that
do not need a GPU at run time: load_kernel_source, gpu_diagnostics
(host block always; OpenCL probes use stubs on CPU-only builds), tagging and
indexing on nmath_small, path helpers, and fast subsetting blocks.inst/cl/nmath_small/: ex_glmbayes_nmath shards plus six decoy
stems from full nmath (bessel, nmath2, qDiscrete_search, sunif,
pcauchy, punif) so subset examples exclude files present in the library
directory but not named on the launcher kernel.load_library_for_kernel, extract_library_subset,
kernel_lib_subset_printing, and step 2 of the tagging workflow run a
fast block on nmath_small during the check; only the slow
full-nmath index rebuild (~137 shards) stays inside \donttest{}.if (has_opencl()); use it in downstream
code before clBuildProgram / kernel dispatch, not before loading
.cl sources.gpu_diagnostics / get_opencl_core_count examples — On CRAN builders with
OpenCL enabled, skip slow device enumeration unless NOT_CRAN=true (avoids
>5s elapsed example NOTE); CPU-only builds still run full stub path.
diagnose_glmbayes() no longer errors on headless CI when no GPU vendor is
detected (avoided accidental use of base diag; PATH prompts only in
interactive() sessions).
inst/include/CL/ (cl.h without cl_version.h).
LinkingTo: opencltools supplies opencltools/openclPort.h only; each
package locates CL/cl.h via its own configure / OpenCL SDK.opencltoolsLdFlags() export: PKG_LIBS fragment (-L... -lopencltools)
for downstream packages linking against openclPort:: symbols.CRAN-SUBMISSION added to .gitignore (local devtools::submit_cran() log).First CRAN release. Version 0.8.0 (rather than 0.1.0) signals that the
runtime toolkit is substantially complete and ready for downstream packages
(nmathopencl, glmbayes, and others) to link against, while leaving
room for integration-driven patch releases (planned 0.8.x) and developer
feedback before a 1.0.0 API freeze.
opencltools is a library-agnostic runtime toolkit for R package developers who ship optional OpenCL acceleration: device probing, kernel source loading, dependency-annotated library assembly, subsetting, and maintainer-side annotation helpers.
has_opencl(), opencl_fp64_available(), opencl_device_info(),
get_opencl_core_count(), and related helpers for probing devices and
drivers before building or dispatching kernels.load_kernel_source() and load_kernel_library() load individual
.cl files or annotated subdirectories from any installed package into
concatenated source strings (R API and C++ openclPort via
LinkingTo: opencltools).load_library_for_kernel() reads kernel dependency annotations and
concatenates only the library shards a launcher kernel needs.verify_opencl_runtime(), detect_compute_runtimes(),
check_runtime_env(), gpu_names(), and diagnose_glmbayes()
for workstation- and package-level environment diagnosis.attach_kernel_call_tags() (new): scan kernel source against a
library's @provides list and write @calls_<tag>, @depends_<tag>, and
@calls_opencl_builtin automatically.attach_cross_library_tags(): expand direct dependencies to a full
transitive closure and write @all_depends_<tag>.attach_kernel_dependency_tags(), write_kernel_dependency_index(),
stage_kernel_dependency_sort(), and extract_library_subset() for
annotating, indexing, sorting, and shipping .cl library subsets.opencl_known_failures.json with warnings when loading stems
with known portability issues.glmbayes / envelope-gradient methodology as a
reference application.README: refocused as library-agnostic; ecosystem table for
opencltools, nmathopencl, and glmbayes; structured
references including Nygren and Nygren (2006) and Stone et al. (2010).inst/CITATION: package manual, JASA (2006), OpenCL survey, and
glmbayes reference-application entry.inst/examples/: runnable examples for diagnostics, kernel loading,
tagging workflow, and library subsetting (OpenCL-heavy examples guarded with
if (has_opencl()) inside \donttest{}).configure: optional OpenCL at build time; CPU-only fallback when
headers or runtime are absent.if (has_opencl()) / skip_if_no_opencl() and
skip_on_cran() where appropriate.scripts/ (excluded from
the source tarball via .Rbuildignore).