A newer version of this document is available. Customers should click here to go to the newest version.
What's New
Introduction to the Intel® oneAPI Math Kernel Library (oneMKL) BLAS and LAPACK with DPC++
Overview of Intel® oneMKL BLAS Routines for Data Parallel C++
Overview of Intel® oneAPI Math Kernel Library (oneMKL) Sparse BLAS for DPC++
Overview of Intel® oneMKL LAPACK Routines for Data Parallel C++
Data Types
Matrix Storage
Error Handling
BLAS Routines
Sparse BLAS Routines
LAPACK Routines
Vector Mathematical Functions
Random Number Generators
Summary Statistics
Fourier Transform Functions
Data Fitting
Bibliography
Appendix A: oneMKL Functionality
Notices and Disclaimers
Sparse BLAS Matrix Handle Contract between User and Library
Sparse BLAS Supported Data and Integer Types
Sparse Storage Formats
oneapi::mkl::sparse::init_matrix_handle
oneapi::mkl::sparse::release_matrix_handle
oneapi::mkl::sparse::set_csr_data
oneapi::mkl::sparse::set_matrix_property
oneapi::mkl::sparse::optimize_gemv
oneapi::mkl::sparse::optimize_trmv
oneapi::mkl::sparse::optimize_trsv
oneapi::mkl::sparse::gemv
oneapi::mkl::sparse::gemvdot
oneapi::mkl::sparse::symv
oneapi::mkl::sparse::trmv
oneapi::mkl::sparse::trsv
oneapi::mkl::sparse::gemm
oneapi::mkl::sparse::init_matmat_descr
oneapi::mkl::sparse::set_matmat_data
oneapi::mkl::sparse::get_matmat_data
oneapi::mkl::sparse::release_matmat_descr
oneapi::mkl::sparse::matmat
oneapi::mkl::sparse::omatcopy
oneapi::mkl::sparse::sort_matrix
gebrd
gebrd (USM Version)
gebrd_scratchpad_size
gels_batch (Buffer Strided Version)
gels_batch (USM Strided Version)
gels_batch_scratchpad_size (Strided Version)
geqrf
geqrf (USM Version)
geqrf_batch (Buffer Strided Version)
geqrf_batch (Group Version)
geqrf_batch (USM Strided Version)
geqrf_batch_scratchpad_size (Group Version)
geqrf_batch_scratchpad_size (Strided Version)
geqrf_scratchpad_size
gerqf
gerqf (USM Version)
gerqf_scratchpad_size
gesvd
gesvd (USM Version)
gesvd_scratchpad_size
getrf
getrf (USM Version)
getrf_batch (Buffer Strided Version)
getrf_batch (Group Version)
getrf_batch (USM Strided Version)
getrf_batch_scratchpad_size (Group Version)
getrf_batch_scratchpad_size (Strided Version)
getrf_scratchpad_size
getrfnp_batch (Buffer Strided Version)
getrfnp_batch (Group Version)
getrfnp_batch (USM Strided Version)
getrfnp_batch_scratchpad_size (Group Version)
getrfnp_batch_scratchpad_size (Strided Version)
getri
getri (USM Version)
getri_batch (Buffer Strided Version)
getri_batch (Group Version)
getri_batch (USM Strided Version)
getri_batch_scratchpad_size (Group Version)
getri_batch_scratchpad_size (Strided Version)
getri_batch (Out-of-place, Buffer Strided Version)
getri_batch (Out-of-place, USM Strided Version)
getri_batch_scratchpad_size (Strided Version)
getri_scratchpad_size
getrs
getrs (USM Version)
getrs_batch (Buffer Strided Version)
getrs_batch (Group Version)
getrs_batch (USM Strided Version)
getrs_batch_scratchpad_size (Group Version)
getrs_batch_scratchpad_size (Strided Version)
getrs_scratchpad_size
getrsnp_batch (Buffer Strided Version)
getrsnp_batch (USM Strided Version)
getrsnp_batch_scratchpad_size (Strided Version)
heevd
heevd (USM Version)
heevd_scratchpad_size
hegvd
hegvd (USM Version)
hegvd_scratchpad_size
hetrd
hetrd (USM Version)
hetrd_scratchpad_size
hetrf
hetrf (USM Version)
hetrf_scratchpad_size
orgbr
orgbr (USM Version)
orgbr_scratchpad_size
orgqr
orgqr (USM Version)
orgqr_batch (Buffer Strided Version)
orgqr_batch (Group Version)
orgqr_batch (USM Strided Version)
orgqr_batch_scratchpad_size (Group Version)
orgqr_batch_scratchpad_size (Strided Version)
orgqr_scratchpad_size
orgtr
orgtr (USM Version)
orgtr_scratchpad_size
ormqr
ormqr (USM Version)
ormqr_scratchpad_size
ormrq
ormrq (USM Version)
ormrq_scratchpad_size
ormtr
ormtr (USM Version)
ormtr_scratchpad_size
potrf
potrf (USM Version)
potrf_batch (Buffer Strided Version)
potrf_batch (Group Version)
potrf_batch (USM Strided Version)
potrf_batch_scratchpad_size (Group Version)
potrf_batch_scratchpad_size (Strided Version)
potrf_scratchpad_size
potri
potri (USM Version)
potri_scratchpad_size
potrs
potrs (USM Version)
potrs_batch (Buffer Strided Version)
potrs_batch (Group Version)
potrs_batch (USM Strided Version)
potrs_batch_scratchpad_size (Group Version)
potrs_batch_scratchpad_size (Strided Version)
potrs_scratchpad_size
syevd
syevd (USM Version)
syevd_scratchpad_size
sygvd
sygvd (USM Version)
sygvd_scratchpad_size
sytrd
sytrd (USM Version)
sytrd_scratchpad_size
sytrf
sytrf (USM Version)
sytrf_scratchpad_size
trtrs
trtrs (USM Version)
trtrs_scratchpad_size
ungbr
ungbr (USM Version)
ungbr_scratchpad_size
ungqr
ungqr (USM Version)
ungqr_batch (Buffer Strided Version)
ungqr_batch (Group Version)
ungqr_batch (USM Strided Version)
ungqr_batch_scratchpad_size (Group Version)
ungqr_batch_scratchpad_size (Strided Version)
ungqr_scratchpad_size
ungtr
ungtr (USM Version)
ungtr_scratchpad_size
unmqr
unmqr (USM Version)
unmqr_scratchpad_size
unmrq
unmrq (USM Version)
unmrq_scratchpad_size
unmtr
unmtr (USM Version)
unmtr_scratchpad_size
oneapi::mkl::rng::mrg32k3a
oneapi::mkl::rng::philox4x32x10
oneapi::mkl::rng::mcg31m1
oneapi::mkl::rng::mcg59
oneapi::mkl::rng::r250
oneapi::mkl::rng::wichmann_hill
oneapi::mkl::rng::mt19937
oneapi::mkl::rng::sfmt19937
oneapi::mkl::rng::mt2203
oneapi::mkl::rng::ars5
oneapi::mkl::rng::sobol
oneapi::mkl::rng::niederreiter
oneapi::mkl::rng::nondeterministic
Distributions Template Parameter Method
oneapi::mkl::rng::uniform (Continuous)
oneapi::mkl::rng::gaussian
oneapi::mkl::rng::exponential
oneapi::mkl::rng::laplace
oneapi::mkl::rng::weibull
oneapi::mkl::rng::cauchy
oneapi::mkl::rng::rayleigh
oneapi::mkl::rng::lognormal
oneapi::mkl::rng::gumbel
oneapi::mkl::rng::gamma
oneapi::mkl::rng::beta
oneapi::mkl::rng::chi_square
oneapi::mkl::rng::gaussian_mv
oneapi::mkl::rng::uniform (Discrete)
oneapi::mkl::rng::uniform_bits
oneapi::mkl::rng::bits
oneapi::mkl::rng::bernoulli
oneapi::mkl::rng::geometric
oneapi::mkl::rng::binomial
oneapi::mkl::rng::hypergeometric
oneapi::mkl::rng::poisson
oneapi::mkl::rng::poisson_v
oneapi::mkl::rng::negative_binomial
oneapi::mkl::rng::multinomial
oneapi::mkl::rng::device::uniform (Continuous)
oneapi::mkl::rng::device::gaussian
oneapi::mkl::rng::device::lognormal
oneapi::mkl::rng::device::exponential
oneapi::mkl::rng::device::uniform (Discrete)
oneapi::mkl::rng::device::bits
oneapi::mkl::rng::device::uniform_bits
oneapi::mkl::rng::device::poisson
oneapi::mkl::rng::device::bernoulli
oneapi::mkl::stats::raw_sum
oneapi::mkl::stats::central_sum
oneapi::mkl::stats::central_sum with User-provided Mean
oneapi::mkl::stats::raw_moment
oneapi::mkl::stats::central_moment
oneapi::mkl::stats::central_moment with User-provided Mean
oneapi::mkl::stats::mean
oneapi::mkl::stats::variation
oneapi::mkl::stats::variation with User-provided Mean
oneapi::mkl::stats::skewness
oneapi::mkl::stats::skewness with User-provided Mean
oneapi::mkl::stats::kurtosis
oneapi::mkl::stats::kurtosis with User-provided Mean
oneapi::mkl::stats::min
oneapi::mkl::stats::max
oneapi::mkl::stats::min_max
descriptor<precision, domain>
descriptor<precision, domain>::set_value
descriptor<precision, domain>::get_value
descriptor<precision, domain>::commit
compute_forward<typename descriptor_type, typename data_type>
compute_backward<typename descriptor_type, typename data_type>
User-Allocated Workspaces
oneMKL Summary Statistics Usage Model
Description
A typical algorithm for random number generators is as follows:
Create and initialize the object for the dataset.
Call the summary statistics routine to calculate the appropriate estimate.
The following example demonstrates how to calculate mean values for a 3-dimentional dataset filled with random numbers. For dataset creation, the make_dataset helper function is used.
Example of Summary Statistics Usage
Buffer API
#include <iostream> #include <vector> #include “CL/sycl.hpp” #include “oneapi/mkl/stats.hpp” int main() { sycl::queue queue; const size_t n_observations = 1000; const size_t n_dims = 3; std::vector<float> x(n_observations * n_dims); // fill x storage with random numbers for(int i = 0; i < n_dims, i++) { for(int j = 0; j < n_observations; j++) { x[j + i * n_observations] = float(std::rand()) / float(RAND_MAX); } } //create buffer for dataset sycl::buffer<float, 1> x_buf(x.data(), x.size()); // create buffer for mean values sycl::buffer<float, 1> mean_buf(n_dims); // create mkl::stats::dataset auto dataset = oneapi::mkl::stats::make_dataset<mkl::stats::layout::row_major>(n_dims, n_observations, x_buf); oneapi::mkl::stats::mean(queue, dataset, mean_buf); // create host accessor for mean_buf to print results auto acc = mean_buf.template get_access<sycl::access::mode::read>(); for(int i = 0; i < n_dims; i++) { std::cout << “Mean value for dimension ” << i << “: ”<< acc[i]<< std::endl; } return 0; }
USM API
#include <iostream> #include <vector> #include “CL/sycl.hpp” #include “oneapi/mkl/stats.hpp” int main() { sycl::queue queue; const size_t n_observations = 1000; const size_t n_dims = 3; sycl::usm_allocator<float, sycl::usm::alloc::shared> allocator(queue); std::vector<float, decltype(allocator)> x(n_observations * n_dims, allocator); // fill x storage with random numbers for(int i = 0; i < n_dims, i++) { for(int j = 0; j < n_observations; j++) { x[j + i * n_observations] = float(std::rand()) / float(RAND_MAX); } } std::vector<float, decltype(allocator)> mean_buf(n_dims, allocator); // create mkl::stats::dataset auto dataset = oneapi::mkl::stats::make_dataset<mkl::stats::layout::row_major>(n_dims, n_observations, x); sycl::event event = oneapi::mkl::stats::mean(queue, dataset, mean); event.wait(); for(int i = 0; i < n_dims; i++) { std::cout << “Mean value for dimension ” << i << “: ”<< mean[i]<< std::endl; } return 0; }
You can also use USM with raw pointers by using the sycl::malloc_shared/malloc_device functions. Additionally, examples that demonstrate usage of summary statistics functionality are available in:
${MKL}/examples/dpcpp/stats/source