Execution time of double-precision and high-precision SYRk implementations on Intel Core i5-7500 and NVIDIA Turing RTX 2080
收藏资源简介:
This dataset contains the execution time for symmetric rank-k update kernels (SYRk, BLAS Level 3) implemented using existing double-precision linear algebra software as well as multiple-precision libraries for CPU and GPU. The operation is C = α * op(A) * op(A^T) + β * C, where α and β are scalars, C is a symmetric matrix, A is a general matrix, and op(A) is one of op(A) = A or op(A) = A^T. Here op(A) is N-by-K. Each raw file provided contains the results of three test runs in milliseconds. The complete source code for the tests can be found at https://github.com/kisupov/mpres-blas. Common experiment settings: • Dense, random, 1000-by-1000 matrices A and C; • Only the upper triangular part of matrix C was used; • Random scalars α and β; • Measurements are in milliseconds; • Arithmetic precision from 106 to 424 bits. Test cases considered: • Non transposed: op(A) = A, op(A^T) = A^T; • Transposed: op(A) = A^T, op(A^T) = A. Experimental environment: • Intel Core i5 7500 processor; • 32GB of DDR4 system memory; • NVIDIA Turing RTX 2080 GPU (2944 CUDA Cores, Compute Capability 7.5, 8GB of GDDR6 memory); • Ubuntu 20.04.5 LTS; • NVIDIA Driver V455.32.00; • CUDA Toolkit V11.1. The following SYRk implementations are evaluated: • OpenBLAS (OpenMP, 53 bits) – double-precision implementation for CPU using OpenBLAS (https://github.com/xianyi/OpenBLAS); • Custom double on CPU (OpenMP, 53 bits) – custom double-precision parallel (OpenMP) implementation; • MPFR (OpenMP) – multiple-precision parallel implementation using the GNU MPFR Library for CPU (https://www.mpfr.org/); • cuBLAS (53 bits) – double-precision implementation for CUDA using the NVIDIA Basic Linear Algebra Subroutines library (https://docs.nvidia.com/cuda/cublas/index.html); • Custom double on GPU (53 bits) – custom double-precision CUDA implementation; • MPRES-BLAS – multiple-precision CUDA implementation using MPRES-BLAS library (https://github.com/kisupov/mpres-blas); • CAMPARY – multiple-precision CUDA implementation using CAMPARY library (https://homepages.laas.fr/mmjoldes/campary/).
本数据集收录了对称秩k更新核(symmetric rank-k update kernels,简称SYRk,属于基础线性代数子程序库(Basic Linear Algebra Subprograms,BLAS)第三级)的执行时长数据,这些核分别基于现有双精度(double-precision)线性代数软件,以及面向CPU和GPU的多精度(multiple-precision)库实现。该操作的数学定义为 $C = alpha cdot op(A) cdot op(A^T) + eta cdot C$,其中$alpha$与$eta$为标量,$C$为对称矩阵,$A$为通用矩阵,$op(A)$为$op(A)=A$或$op(A)=A^T$二者之一,此时$op(A)$的维度为$N imes K$。每个原始文件均包含三次测试运行的结果,单位为毫秒。测试的完整源代码可于https://github.com/kisupov/mpres-blas 获取。 通用实验设置如下: • 矩阵A与C均为稠密随机生成的1000×1000矩阵; • 仅使用矩阵C的上三角部分; • 标量$alpha$与$eta$为随机生成; • 时长测量单位为毫秒; • 算术精度范围为106至424比特。 测试用例包括: • 非转置模式:$op(A)=A$,$op(A^T)=A^T$; • 转置模式:$op(A)=A^T$,$op(A^T)=A$。 实验环境: • Intel Core i5 7500处理器; • 32GB DDR4系统内存; • NVIDIA Turing RTX 2080 GPU(含2944个CUDA核心,计算能力7.5,8GB GDDR6显存); • Ubuntu 20.04.5 LTS操作系统; • NVIDIA驱动程序V455.32.00; • CUDA工具包V11.1。 本次评估的SYRk实现方案如下: • OpenBLAS(OpenMP,53比特):面向CPU的双精度(double-precision)实现,依托OpenBLAS库(https://github.com/xianyi/OpenBLAS); • CPU端自定义双精度(double-precision)并行实现(OpenMP,53比特):基于OpenMP的自定义并行双精度实现; • MPFR(OpenMP):面向CPU的多精度(multiple-precision)并行实现,使用GNU MPFR库(https://www.mpfr.org/); • cuBLAS(53比特):面向CUDA的双精度(double-precision)实现,基于NVIDIA基础线性代数子程序库(https://docs.nvidia.com/cuda/cublas/index.html); • GPU端自定义双精度(double-precision)实现(53比特):面向CUDA的自定义双精度实现; • MPRES-BLAS:基于MPRES-BLAS库的多精度(multiple-precision)CUDA实现(https://github.com/kisupov/mpres-blas); • CAMPARY:基于CAMPARY库的多精度(multiple-precision)CUDA实现(https://homepages.laas.fr/mmjoldes/campary/)。



