25.3 OpenCL

OpenCL (Open Computing Language) is a framework that enables writing programs that execute across heterogeneous platforms. An OpenCL program can be run on CPUs and GPUs. In order to run OpenCL programs, an OpenCL runtime be installed on the target system.

Stan’s OpenCL backend is currently supported in CmdStan and its wrappers. In order to use it, the model must be compiled with the STAN_OPENCL makefile flag. Setting this flag means that the Stan-to-C++ translator (stanc3) will be supplied the --use-opencl flag and that the OpenCL enabled backend (Stan Math functions) will be enabled.

In Stan, the following distributions can be automatically run in parallel on both CPUs and GPUs with OpenCL:

  • bernoulli_lpmf

  • bernoulli_logit_lpmf

  • bernoulli_logit_glm_lpmf*

  • beta_lpdf

  • beta_proportion_lpdf

  • binomial_lpmf

  • categorical_logit_glm_lpmf*

  • cauchy_lpdf

  • chi_square_lpdf

  • double_exponential_lpdf

  • exp_mod_normal_lpdf

  • exponential_lpdf

  • frechet_lpdf

  • gamma_lpdf

  • gumbel_lpdf

  • inv_chi_square_lpdf

  • inv_gamma_lpdf

  • logistic_lpdf

  • lognormal_lpdf

  • neg_binomial_lpmf

  • neg_binomial_2_lpmf

  • neg_binomial_2_log_lpmf

  • neg_binomial_2_log_glm_lpmf*

  • normal_lpdf

  • normal_id_glm_lpdf*

  • ordered_logistic_glm_lpmf*

  • pareto_lpdf

  • pareto_type_2_lpdf

  • poisson_lpmf

  • poisson_log_lpmf

  • poisson_log_glm_lpmf*

  • rayleigh_lpdf

  • scaled_inv_chi_square_lpdf

  • skew_normal_lpdf

  • std_normal_lpdf

  • student_t_lpdf

  • uniform_lpdf

  • weibull_lpdf

  • OpenCL is not used when the covariate argument to the GLM functions is a row_vector.