Skip to content

How to implement functions in OpenCL #16

@t4c1

Description

@t4c1

Description

As requested by @rok-cesnovar I prepared a list of all functions in Stan Math and proposed how to implement them in OpenCL. Most are probably possible using kernel generator.

Legend:

kg Possible with kernel generator. Might require adding new operations.
no OpenCL implementation makes no sense.
? I am not sure after quickly looking trough code.

List

Phi kg
Phi_approx kg
abs kg
algebra_solver ?
append_array kg
append_col kg
append_row kg
atan2 kg
bernoulli_ccdf_log kg?
bernoulli_cdf kg?
bernoulli_cdf_log kg?
bernoulli_lccdf kg?
bernoulli_lcdf kg?
bernoulli_log kg
bernoulli_logit_glm_lpmf kg
bernoulli_logit_log kg
bernoulli_logit_lpmf kg
bernoulli_logit_rng kg+some work?
bernoulli_lpmf kg
bernoulli_rng kg+some work?
bessel_first_kind kg?
bessel_second_kind kg?
beta_binomial_ccdf_log ?
beta_binomial_cdf ?
beta_binomial_cdf_log ?
beta_binomial_lccdf ?
beta_binomial_lcdf ?
beta_binomial_log ?
beta_binomial_lpmf ?
beta_binomial_rng kg+some work?
beta_ccdf_log ?
beta_cdf ?
beta_cdf_log ?
beta_lccdf ?
beta_lcdf ?
beta_log ?
beta_lpdf kg?
beta_proportion_ccdf_log ?
beta_proportion_cdf_log kg
beta_proportion_lccdf ?
beta_proportion_lcdf kg
beta_proportion_log kg?
beta_proportion_lpdf kg?
beta_proportion_rng kg+some work?
beta_rng kg+some work?
binary_log_loss kg
binomial_ccdf_log kg?
binomial_cdf kg?
binomial_cdf_log kg?
binomial_coefficient_log kg
binomial_lccdf kg?
binomial_lcdf kg?
binomial_log kg?
binomial_logit_log kg?
binomial_logit_lpmf kg?
binomial_lpmf kg?
binomial_rng kg+some work?
block kg
categorical_log kg
categorical_logit_glm_lpmf kg
categorical_logit_log kg
categorical_logit_lpmf kg
categorical_logit_rng kg+some work?
categorical_lpmf kg
categorical_rng kg+some work?
cauchy_ccdf_log kg?
cauchy_cdf kg?
cauchy_cdf_log kg?
cauchy_lccdf kg?
cauchy_lcdf kg?
cauchy_log kg?
cauchy_lpdf kg?
cauchy_rng kg+some work?
chi_square_ccdf_log kg?
chi_square_cdf kg?
chi_square_cdf_log kg?
chi_square_lccdf kg?
chi_square_lcdf kg?
chi_square_log kg?
chi_square_lpdf kg?
chi_square_rng kg+some work?
choose kg?
col kg
cols no
columns_dot_product kg
columns_dot_self kg
cov_exp_quad kg
crossprod can
csr_extract_u ?
csr_extract_v ?
csr_extract_w ?
csr_matrix_times_vector ?
csr_to_dense_matrix ?
cumulative_sum separate kernel
determinant separate kernel
diag_matrix kg
diag_post_multiply kg
diag_pre_multiply kg
diagonal kg
digamma kg
dims no
dirichlet_log kg
dirichlet_lpdf kg
dirichlet_rng kg+some work?
distance kg
divide kg
dot_product kg
dot_self kg
double_exponential_ccdf_log kg?
double_exponential_cdf kg?
double_exponential_cdf_log kg?
double_exponential_lccdf kg?
double_exponential_lcdf kg?
double_exponential_log kg?
double_exponential_lpdf kg?
double_exponential_rng kg+some work?
e can't find
eigenvalues_sym separate kernel
eigenvectors_sym separate kernel
exp_mod_normal_ccdf_log kg?
exp_mod_normal_cdf kg?
exp_mod_normal_cdf_log kg?
exp_mod_normal_lccdf kg?
exp_mod_normal_lcdf kg?
exp_mod_normal_log kg?
exp_mod_normal_lpdf kg?
exp_mod_normal_rng kg+some work?
exponential_ccdf_log kg?
exponential_cdf kg?
exponential_cdf_log kg?
exponential_lccdf kg?
exponential_lcdf kg?
exponential_log kg?
exponential_lpdf kg?
exponential_rng kg+some work?
fabs kg
falling_factorial kg?
fdim kg
fma kg
fmax kg
fmin kg
fmod kg?
frechet_ccdf_log kg?
frechet_cdf kg?
frechet_cdf_log kg?
frechet_lccdf kg?
frechet_lcdf kg?
frechet_log kg?
frechet_lpdf kg?
frechet_rng kg+some work?
gamma_ccdf_log kg?
gamma_cdf kg?
gamma_cdf_log kg?
gamma_lccdf kg?
gamma_lcdf kg?
gamma_log kg?
gamma_lpdf kg?
gamma_p kg
gamma_q kg
gamma_rng kg+some work?
gaussian_dlm_obs_log separate kernel?
gaussian_dlm_obs_lpdf separate kernel?
gumbel_ccdf_log kg?
gumbel_cdf kg?
gumbel_cdf_log kg?
gumbel_lccdf kg?
gumbel_lcdf kg?
gumbel_log kg?
gumbel_lpdf kg?
gumbel_rng kg+some work?
head kg
hypergeometric_log kg?
hypergeometric_lpmf kg?
hypergeometric_rng kg+some work?
hypot kg
if_else kg
inc_beta kg
int_step kg
integrate_1d separate kernel?
integrate_ode separate kernel?
integrate_ode_adams separate kernel?
integrate_ode_bdf separate kernel?
integrate_ode_rk45 separate kernel?
inv kg
inv_Phi kg
inv_chi_square_ccdf_log kg?
inv_chi_square_cdf kg?
inv_chi_square_cdf_log kg?
inv_chi_square_lccdf kg?
inv_chi_square_lcdf kg?
inv_chi_square_log kg?
inv_chi_square_lpdf kg?
inv_chi_square_rng kg+some work?
inv_cloglog kg
inv_gamma_ccdf_log kg?
inv_gamma_cdf kg?
inv_gamma_cdf_log kg?
inv_gamma_lccdf kg?
inv_gamma_lcdf kg?
inv_gamma_log kg?
inv_gamma_lpdf kg?
inv_gamma_rng kg+some work?
inv_logit kg
inv_sqrt kg
inv_square kg
inv_wishart_log kg?
inv_wishart_lpdf kg?
inv_wishart_rng kg+some work?
inverse separate kernel
inverse_spd separate kernel
is_inf kg
is_nan kg
lbeta kg
lchoose can't find
lkj_corr_cholesky_log kg?
lkj_corr_cholesky_lpdf kg?
lkj_corr_cholesky_rng kg+some work?
lkj_corr_log kg?
lkj_corr_lpdf kg?
lkj_corr_rng kg+some work?
lkj_cov_log kg?
lmgamma kg
lmultiply can't find
log1m kg
log1m_exp kg
log1m_inv_logit kg
log1p_exp kg
log_determinant separate kernel?
log_diff_exp kg
log_falling_factorial kg
log_inv_logit kg
log_mix kg
log_rising_factorial kg
log_softmax kg?
log_sum_exp kg
logical_and kg
logical_eq kg
logical_gt kg
logical_gte kg
logical_lt kg
logical_lte kg
logical_negation kg
logical_neq kg
logical_or kg
logistic_ccdf_log kg?
logistic_cdf kg?
logistic_cdf_log kg?
logistic_lccdf kg?
logistic_lcdf kg?
logistic_log kg?
logistic_lpdf kg?
logistic_rng kg+some work?
logit kg
lognormal_ccdf_log kg?
lognormal_cdf kg?
lognormal_cdf_log kg?
lognormal_lccdf kg?
lognormal_lcdf kg?
lognormal_log kg?
lognormal_lpdf kg?
lognormal_rng kg+some work?
machine_precision no
map_rect no?
matrix_exp separate kernel?
matrix_exp_multiply separate kernel?
max kg
mdivide_left separate kernel
mdivide_left_spd separate kernel
mdivide_right separate kernel
mdivide_right_spd separate kernel
mean kg
min kg
minus kg
modified_bessel_first_kind kg?
modified_bessel_second_kind kg?
modulus kg
multi_gp_cholesky_log kg?
multi_gp_cholesky_lpdf kg?
multi_gp_log ?
multi_gp_lpdf ?
multi_normal_cholesky_log kg?
multi_normal_cholesky_lpdf kg?
multi_normal_cholesky_rng kg+some work?
multi_normal_log kg?
multi_normal_lpdf kg?
multi_normal_prec_log kg?
multi_normal_prec_lpdf kg?
multi_normal_rng kg+some work?
multi_student_t_log kg?
multi_student_t_lpdf kg?
multi_student_t_rng kg+some work?
multinomial_log kg?
multinomial_lpmf kg?
multinomial_rng kg+some work?
multiply_log kg
multiply_lower_tri_self_transpose existing kernel?
neg_binomial_2_ccdf_log kg?
neg_binomial_2_cdf kg?
neg_binomial_2_cdf_log kg?
neg_binomial_2_lccdf kg?
neg_binomial_2_lcdf kg?
neg_binomial_2_log kg
neg_binomial_2_log_glm_lpmf
neg_binomial_2_log_log kg
neg_binomial_2_log_lpmf kg
neg_binomial_2_log_rng kg+some work?
neg_binomial_2_lpmf kg
neg_binomial_2_rng kg+some work?
neg_binomial_ccdf_log kg?
neg_binomial_cdf kg?
neg_binomial_cdf_log kg?
neg_binomial_lccdf kg?
neg_binomial_lcdf kg?
neg_binomial_log kg
neg_binomial_lpmf kg
neg_binomial_rng kg+some work?
negative_infinity no
normal_ccdf_log kg?
normal_cdf kg?
normal_cdf_log kg?
normal_id_glm_lpdf kg
normal_lccdf kg?
normal_lcdf kg?
normal_log kg
normal_lpdf kg
normal_rng kg+some work?
not_a_number no
num_elements no
ordered_logistic_glm_lpmf kg
ordered_logistic_log kg
ordered_logistic_lpmf kg
ordered_logistic_rng kg+some work?
ordered_probit_log kg?
ordered_probit_lpmf kg?
ordered_probit_rng kg+some work?
owens_t kg?
pareto_ccdf_log kg?
pareto_cdf kg?
pareto_cdf_log kg?
pareto_lccdf kg?
pareto_lcdf kg?
pareto_log kg?
pareto_lpdf kg?
pareto_rng kg+some work?
pareto_type_2_ccdf_log kg?
pareto_type_2_cdf kg?
pareto_type_2_cdf_log kg?
pareto_type_2_lccdf kg?
pareto_type_2_lcdf kg?
pareto_type_2_log kg?
pareto_type_2_lpdf kg?
pareto_type_2_rng kg+some work?
pi no
plus can't find
poisson_ccdf_log kg?
poisson_cdf kg?
poisson_cdf_log kg?
poisson_lccdf kg?
poisson_lcdf kg?
poisson_log kg
poisson_log_glm_lpmf kg
poisson_log_log kg
poisson_log_lpmf kg
poisson_log_rng kg+some work?
poisson_lpmf kg
poisson_rng kg+some work?
positive_infinity no
pow kg
prod kg
qr_Q separate kernel
qr_R separate kernel
qr_thin_Q separate kernel
qr_thin_R separate kernel
quad_form existing separate kernel
quad_form_diag separate kernel?
quad_form_sym existing separate kernel
rank kg
rayleigh_ccdf_log kg?
rayleigh_cdf kg?
rayleigh_cdf_log kg?
rayleigh_lccdf kg?
rayleigh_lcdf kg?
rayleigh_log kg?
rayleigh_lpdf kg?
rayleigh_rng kg+some work?
rep_array kg
rep_matrix kg
rep_row_vector kg
rep_vector kg
rising_factorial ?
row kg
rows no
rows_dot_product kg
rows_dot_self kg
scale_matrix_exp_multiply ?
scaled_inv_chi_square_ccdf_log kg?
scaled_inv_chi_square_cdf kg?
scaled_inv_chi_square_cdf_log kg?
scaled_inv_chi_square_lccdf kg?
scaled_inv_chi_square_lcdf kg?
scaled_inv_chi_square_log kg?
scaled_inv_chi_square_lpdf kg?
scaled_inv_chi_square_rng kg+some work?
sd kg
segment kg
singular_values separate kernel
size no
skew_normal_ccdf_log kg?
skew_normal_cdf kg?
skew_normal_cdf_log kg?
skew_normal_lccdf kg?
skew_normal_lcdf kg?
skew_normal_log kg?
skew_normal_lpdf kg?
skew_normal_rng kg+some work?
softmax kg
sort_asc separate kernel
sort_desc separate kernel
sort_indices_asc separate kernel
sort_indices_desc separate kernel
sqrt2 kg
square kg
squared_distance kg
std_normal_log kg
std_normal_lpdf kg
step kg
student_t_ccdf_log kg?
student_t_cdf kg?
student_t_cdf_log kg?
student_t_lccdf kg?
student_t_lcdf kg?
student_t_log kg?
student_t_lpdf kg?
student_t_rng kg+some work?
sub_col kg
sub_row kg
sum kg
tail kg
tcrossprod separate kernel?
to_array_1d no
to_array_2d no
to_matrix no
to_row_vector no
to_vector no
trace kg
trace_gen_quad_form existing separate kernel
trace_quad_form existing separate kernel
transpose kg
trigamma kg
trunc kg
uniform_ccdf_log kg?
uniform_cdf kg?
uniform_cdf_log kg?
uniform_lccdf kg?
uniform_lcdf kg?
uniform_log kg?
uniform_lpdf kg?
uniform_rng kg+some work?
variance kg
von_mises_log kg?
von_mises_lpdf kg?
von_mises_rng kg+some work?
weibull_ccdf_log kg?
weibull_cdf kg?
weibull_cdf_log kg?
weibull_lccdf kg?
weibull_lcdf kg?
weibull_log kg?
weibull_lpdf kg?
weibull_rng kg+some work?
wiener_log kg?
wiener_lpdf kg?
wishart_log kg?
wishart_lpdf kg?
wishart_rng kg+some work?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions