/
5) GPGPU Computing
5) GPGPU Computing
YARCC has a number of NVidia GPGPU nodes which are documented in /wiki/spaces/RHPC/pages/25101677.
Access to the GPGPU cards is easily done through the 'gputools' package. You need to load the module "cuda" to use the package.
Package 'gputools'
gputools provides R interfaces to a number of common functions implemented using the NVidia CUDA language and toolkit.
function | equivalent R function | description |
---|---|---|
chooseGpu | select GPU device to perform calculations | |
cpuMatMult | perform matrix multiplication using R's BLAS library | |
getGpuId | queries the GPU driver for the ID of the device being usedfor the computation | |
gpuCor | cor with use="pairwisecomplete" | calculation correlation coefficients |
gpuCrossprod | matrix cross-product | |
gpuDist | dist | compute distances between vectors |
gpuDistClust | hClust | compute distances and hierarchical clustering |
gpuGlm | glm, lm, loglin | fitting generalised linear models using QR decomposition |
gpuGranger | Granger Causality Tests | |
gpuHclust | hclust | clustering on a set ofpoints |
gpuLm | fitting linear models | |
gpuLm.defaultTol | switch tolerance depending on precision | |
gpuLm.fit | fitter function for linear models | |
gpuLs.fit | least sqares fit using QR decomposition | |
gpuMatMult | perform matrix multiplication | |
gpuMi | B spline based mutual information | |
gpuQr | estimate the QR decomposition for a matrix | |
gpuSolve | estimate the solution to a matrix vector equation | |
gpuTcrossprod | perform matrix transposed cross-product | |
gpuTtest | T-Test Estimator |
More detailed information on using the package can be found here: gputools documentation
Example YARCC jobs using 'gputools'
Example GPGPU R script
require(gputools) test.gpuCrossprod <- function(x, y) { matA <- matrix(runif(x*y), x, y); matB <- matrix(runif(x*y), x, y); print(sprintf("Using GPU: %s for gpuCrossprod test", getGpuId())); system.time(gpuCrossprod(matA, matB), TRUE); } test.cpuCrossprod <- function(x, y) { matA <- matrix(runif(x*y), x, y); matB <- matrix(runif(x*y), x, y); print("Using CPU for cpuCrossprod test"); system.time(crossprod(matA, matB), TRUE); } print("Testing GPU") test.gpuCrossprod(3000,4000) test.cpuCrossprod(3000,4000)
GPGPU Job Script
#$ -cwd -V #$ -l h_rt=0:15:00 #$ -o logs #$ -e logs #$ -N gpu_test #$ -l nvidia_k40=1 echo `date`: executing gputools R module on host ${HOSTNAME} with ${NSLOTS} slots /usr/bin/nvidia-smi --list-gpus R CMD BATCH --no-save gpu-test.R output/gpu-test.Rout
Performance of GPGPU test
> print("Testing GPU") [1] "Testing GPU" > > test.gpuCrossprod(3000,4000) [1] "Using GPU: 0 for gpuCrossprod test" user system elapsed 0.573 0.458 1.048 > test.cpuCrossprod(3000,4000) [1] "Using CPU for cpuCrossprod test" user system elapsed 131.222 0.092 131.170 > > > proc.time() user system elapsed 135.548 0.901 136.414
, multiple selections available,
Related content
4) Cluster Computing
4) Cluster Computing
More like this
Submitting jobs to the partitions on Viking.
Submitting jobs to the partitions on Viking.
Read with this
High Performance Computing with R
High Performance Computing with R
More like this
Physics compute cluster
Physics compute cluster
More like this
Research Computing Support
Research Computing Support
More like this
An Introduction to Research Computing at York
An Introduction to Research Computing at York
More like this