| Type: | Package | 
| Title: | Parallel Random Number Generation on GPU | 
| Description: | Builds on 'gpuR' and utilizes the 'clRNG' ('OpenCL') library to provide efficient tools to generate independent random numbers in parallel on a GPU and save the results as 'R' objects, ensuring high-quality random numbers even when 'R' is used interactively or in an ad-hoc manner. Includes Fisher's simulation method adapted from Patefield, William M (1981) <doi:10.2307/2346669> and 'MRG31k3p' Random Number Generator from 'clRNG' library by Advanced Micro Devices, Inc. (2015) https://github.com/clMathLibraries/clRNG. | 
| Version: | 0.0.5 | 
| Date: | 2024-07-11 | 
| Maintainer: | Ruoyong Xu <ruoyong.xu@mail.utoronto.ca> | 
| License: | GPL-3 | 
| Encoding: | UTF-8 | 
| NeedsCompilation: | yes | 
| Depends: | R (≥ 3.5.0), gpuR | 
| Suggests: | knitr | 
| LinkingTo: | RViennaCL, Rcpp, gpuR, RcppEigen | 
| OS_type: | unix | 
| VignetteBuilder: | knitr | 
| RoxygenNote: | 7.3.2 | 
| Packaged: | 2024-07-12 15:56:59 UTC; ruoyong | 
| Author: | Ruoyong Xu | 
| Repository: | CRAN | 
| Date/Publication: | 2024-07-16 09:00:02 UTC | 
createStreamsCpu
Description
Create streams stored on the CPU.
Usage
createStreamsCpu(n = prod(getOption("clrng.Nglobal")))
Arguments
| n | a integer specifying number of streams to create, default is the number of total work items in use. | 
Value
an R matrix of streams on CPU.
Examples
library(clrng)
if (detectGPUs() >= 1) {
  t(createStreamsCpu(n=5))
  ## GPU streams
  myStreamsGpu = vclMatrix(createStreamsCpu(n=4)) }else {
  message("No GPU context available")
}
createStreamsGpu
Description
Generate streams on a GPU device
Usage
createStreamsGpu(n = prod(getOption("clrng.Nglobal")))
Arguments
| n | a integer specifying number of streams to create, default is the number of total work items in use | 
Value
a stream object of class 'vclMatrix' on GPU
Examples
library(clrng)
if (detectGPUs() >= 1) {
 setBaseCreator(rep(12345,6))
 setContext(grep("gpu", listContexts()$device_type)[1])
 myStreamsGpu = createStreamsGpu(4)
 t(as.matrix(myStreamsGpu))
 myStreamsGpu2 = createStreamsGpu(6)
 t(as.matrix(myStreamsGpu2)) }else {
  message("No GPU context available")
}
fisher.sim
Description
Performs Monte carlo's simulation for Fisher's exact test on GPU.
Usage
fisher.sim(
  x,
  N,
  streams,
  Nglobal = getOption("clrng.Nglobal"),
  type = getOption("clrng.type"),
  returnStatistics = FALSE,
  verbose = FALSE
)
Arguments
| x | a vclMatrix of integers. | 
| N | an integer specifying number of replicates. | 
| streams | a vclMatrix of streams. Default using streams with package default initial seeds. | 
| Nglobal | a (non-empty) integer vector specifying size of the index space on GPU for use, with default value from global option 'clrng.Nglobal'. | 
| type | a character string specifying "double" or "float" of the returned test statistics, with default value from global option 'clrng.type'. | 
| returnStatistics | a logical value, if TRUE, return test statistics, default is FALSE. | 
| verbose | a logical value, if TRUE, print extra information, default is FALSE. | 
Value
a ‘htest’ object of p-value and actual number of replicates and a list of test statistics, streams used, threshold.
Examples
library('clrng')
if (detectGPUs() >= 1) {
  setContext(grep("gpu", listContexts()$device_type)[1])
  
  Job <- matrix(c(1,2,1,0, 3,3,6,1, 10,10,14,9, 6,7,12,11), 4, 4)
  Job <- gpuR::vclMatrix(Job, type="integer")
  
  getOption('clrng.type')
  options(clrng.Nglobal = c(64,16))
  streams <- createStreamsGpu()
  result <- fisher.sim(Job, 1e5, streams = streams)
  print(result)
  result$streams
  result$threshold
} else {
  message("No GPU context available")
}
get_system_info
Description
This function prints operating system, CPU, GPU, and OpenCL version information.
Usage
get_system_info()
Value
List of system information.
logfactSum
Description
Computes the log-factorial of a table on a GPU.
Usage
logfactSum(x, Nglobal = getOption("clrng.Nglobal"))
Arguments
| x | a matrix of integers. | 
| Nglobal | a (non-empty) integer vector specifying size of the index space for use. | 
Value
sum of log-factorials of elements of the input matrix ‘x’.
Examples
library(clrng)
if (detectGPUs() >= 1) {
setContext(grep("gpu", listContexts()$device_type)[1])
x <- matrix(c(1:36), 6,6)
logfactSum(x, c(2,2))
# note if matrix is not of integers, a warning will be displayed, eg.
x2 <- matrix(c(1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,9.1), 3,3)
is.integer(x2)
logfactSum(x2, c(16,16))} else {
  message("No GPU context available")
}
Sample dataset: month.RData
Description
Counts of birth anomalies by birth month and 12 congenital anomalies categories in 2018 within the United States.
Usage
data(month)
Format
A data frame with 12 rows and 12 columns:
- Ane
- anencephaly 
- Men
- meningomyelocele/spina bifida 
- Cya
- cyanotic congenital heart disease 
- Her
- congenital diaphragmatic hernia 
- Omp
- omphalocele 
- Gas
- gastrochisis 
- Lim
- limb reduction defect 
- Cle
- cleft lip with or without cleft palate 
- Pal
- cleft palate alone 
- Dow
- Down syndrome 
- Chr
- suspected chromosomal disorder 
- Hyp
- hypospadias. 
Source
Centers for Disease Control and Prevention (CDC)
References
https://www.cdc.gov/nchs/data_access/VitalStatsOnline.htm
Examples
data(month)
head(month)
qqnormGpu
Description
Calculate quantiles on a GPU and produce a Q-Q plot in R.
Usage
qqnormGpu(
  y,
  ylim,
  mu = 0,
  sigma = 1,
  lower.tail = 1,
  main = "Normal Q-Q Plot",
  xlab = "Theoretical Quantiles",
  ylab = "Sample Quantiles",
  Nglobal = getOption("clrng.Nglobal"),
  Nlocal = c(2, 2),
  type = getOption("clrng.type"),
  verbose = FALSE,
  ...
)
Arguments
| y | data sample. | 
| ylim | limits on the plot region. | 
| mu | mean of Normal distribution, default is 0. | 
| sigma | variance of Normal distribution, default is 1. | 
| lower.tail | a logical value specifying whether use lower tail probability, default is TRUE. | 
| main | plot label. | 
| xlab | plot label. | 
| ylab | plot label. | 
| Nglobal | a (non-empty) integer vector specifying size of work items for use, with default value from global option 'clrng.Nglobal'. | 
| Nlocal | a (non-empty) integer vector specifying size of local group size of the index space, default is c(2,2). | 
| type | a character string specifying "double" or "float" of random numbers, with default value from global option 'clrng.type'. | 
| verbose | a logical value, if TRUE, print extra information, default is FALSE. | 
| ... | other graphical parameters. | 
Value
a Normal Q-Q plot.
Examples
library(clrng)
if (detectGPUs() >= 1) {
setContext(grep("gpu", listContexts()$device_type)[1])
y <- stats::rt(256, df = 5)  # generates 256 random numbers from a Student's t-distribution
clrng::qqnormGpu(y, ylim=c(-4,5), mu=0, sigma=1, Nglobal=c(16,4))
x<-stats::rnorm(256)
clrng::qqnormGpu(x, Nglobal=c(8,6)) } else {
  message("No GPU context available")
}
rexpGpu
Description
Generate exponential random numbers parallely on a GPU.
Usage
rexpGpu(
  n,
  rate = 1,
  streams,
  Nglobal = getOption("clrng.Nglobal"),
  type = getOption("clrng.type"),
  verbose = FALSE
)
Arguments
| n | a number or a vector specifying the size of the output vector or matrix. | 
| rate | a number specifying the distribution parameter, mean equals to 1/rate. | 
| streams | a vclMatrix of streams. | 
| Nglobal | a (non-empty) integer vector specifying size of work items for use, with default value from global option 'clrng.Nglobal'. | 
| type | a character string specifying "double" or "float" of random numbers, with default value from global option 'clrng.type'. | 
| verbose | a logical value, if TRUE, print extra information, default is FALSE. | 
Details
type specifies the precision type of random numbers. If GPU supports "double", 'clrng.Nglobal' is "double", otherwise, ‘clrng.Nglobal’ is "single".
Value
a 'vclVector' or 'vclMatrix' of exponential random numbers.
Examples
library('clrng')
if (detectGPUs() >= 1) {
  setContext(grep("gpu", listContexts()$device_type)[1])
  streams <- createStreamsGpu()
  as.vector(rexpGpu(7, streams=streams))
  # produce float precision random numbers
  options(clrng.type='float')
  as.matrix(rexpGpu(c(2,3), rate=0.5, streams))} else {
  message("No GPU context available")
}
rnormGpu
Description
Generate standard Normal random numbers parallely on a GPU.
Usage
rnormGpu(
  n,
  streams,
  Nglobal = getOption("clrng.Nglobal"),
  type = getOption("clrng.type"),
  verbose = FALSE
)
Arguments
| n | a number or a vector specifying the size of output vector or matrix. | 
| streams | a vclMatrix of streams. | 
| Nglobal | a (non-empty) integer vector specifying size of work items for use, with default value from global option 'clrng.Nglobal'. | 
| type | a character string specifying "double" or "float" of random numbers, with default value from global option 'clrng.type'. | 
| verbose | a logical value, if TRUE, print extra information, default is FALSE. | 
Details
type specifies the precision type of random numbers. If GPU supports "double", 'clrng.Nglobal' is "double", otherwise, ‘clrng.Nglobal’ is "single".
Value
a 'vclVector' or 'vclMatrix' of standard Normal random numbers.
Examples
library(clrng)
if (detectGPUs() >= 1) {
  setContext(grep("gpu", listContexts()$device_type)[1])
  currentPlatform()
  streams <- createStreamsGpu()
  as.vector(rnormGpu(7, streams=streams))
  getOption('clrng.Nglobal')
  # use float precision and global size
  as.matrix(rnormGpu(c(2,3), streams=streams))} else {
  message("No GPU context available")
}
runifGpu
Description
Generate uniform random numbers parallely on a GPU.
Usage
runifGpu(
  n,
  streams,
  Nglobal = getOption("clrng.Nglobal"),
  type = getOption("clrng.type"),
  verbose = FALSE
)
Arguments
| n | a number or a numeric vector specifying the size of output vector or matrix. | 
| streams | a vclMatrix of streams. | 
| Nglobal | a (non-empty) integer vector specifying size of work items for use, with default value from global option 'clrng.Nglobal'. | 
| type | a character string specifying "double" or "float" of random numbers, with default value from global option 'clrng.type'. | 
| verbose | a logical value, if TRUE, print extra information, default is FALSE. | 
Details
type specifies the precision type of random numbers. If GPU supports "double", 'clrng.Nglobal' is "double", otherwise, ‘clrng.Nglobal’ is "single".
Value
a 'vclVector' or 'vclMatrix' of uniform random numbers.
Examples
 
library('clrng')
if (detectGPUs() >= 1) {
  setContext(grep("gpu", listContexts()$device_type)[1])
  currentDevice()
  getOption('clrng.Nglobal')
  streams <- createStreamsGpu()
  as.vector(runifGpu(5, streams))
  # Change global options 
  options(clrng.type="float")
  # produce a matrix of random numbers
  as.matrix(runifGpu(c(2,2), streams))} else {
  message("No GPU context available")
}
setBaseCreator
Description
Set the initial seed of the first stream.
Usage
setBaseCreator(initial = rep(12345, 6))
Arguments
| initial | a vector of six 31-bit integers specifying the initial state of the first stream. Default is c(12345,12345,12345,12345,12345,12345). | 
Details
initial is of length 6, recycled if shorter.
Value
a stream object of class 'vclMatrix'.
Examples
library('clrng')
setBaseCreator(c(111,222,333,444,555,666))
Sample dataset: week.RData
Description
Frequencies for birth anomalies by birth day of week and 12 congenital anomalies categories in 2018 within the United States.
Usage
data(week)
Format
A data frame with 7 rows and 12 columns:
- Ane
- anencephaly 
- Men
- meningomyelocele/spina bifida 
- Cya
- cyanotic congenital heart disease 
- Her
- congenital diaphragmatic hernia 
- Omp
- omphalocele 
- Gas
- gastrochisis 
- Lim
- limb reduction defect 
- Cle
- cleft lip with or without cleft palate 
- Pal
- cleft palate alone 
- Dow
- Down syndrome 
- Chr
- suspected chromosomal disorder 
- Hyp
- hypospadias. 
Source
Centers for Disease Control and Prevention (CDC)
References
https://www.cdc.gov/nchs/data_access/VitalStatsOnline.htm