#benchmark #blas #accelerate #open-blas #mkl #thread #sd-gemm

app gemm-benchmark

简单的BLAS[sd]gemm基准测试

4个版本

0.1.3 2022年8月4日
0.1.2 2022年5月24日
0.1.1 2021年10月30日
0.1.0 2021年7月6日

#336 in 机器学习

每月24次下载

MIT/Apache

13KB
81

[sd]gemm基准测试

简介

这是一个基于[sd]gemm基准测试的小型应用程序,类似于ACES DGEMM,使用Rust实现。它支持以下BLAS库

  • Accelerate(macOS)
  • Intel MKL
  • OpenBLAS

构建

使用Accelerate(macOS)构建

$ cargo install gemm-benchmark --features accelerate

使用BLIS构建

$ cargo install gemm-benchmark --features blis

使用Intel MKL构建

要使用静态链接的Intel MKL构建基准测试,使用

$ cargo install gemm-benchmark --features intel-mkl

Intel MKL使用AMD Zen CPU的Zen特定[sd]gemm内核。然而,这些内核在许多Zen CPU上的速度比AVX2内核慢。您可以构建基准测试以覆盖Intel CPU检测,使MKL在Zen CPU上使用AVX2内核。这确实需要动态链接,因为不允许修改MKL二进制文件。要启用此覆盖,请使用intel-mkl-amd功能

$ cargo install gemm-benchmark --features intel-mkl-amd

使用OpenBLAS构建

$ cargo install gemm-benchmark --features openblas

在运行之前设置OPENBLAS_NUM_THREADS=1

基准测试

默认情况下,使用256 x 256矩阵对sgemm进行基准测试,迭代1,000次,使用1个线程。可以使用命令行标志设置维度(-d)、迭代次数(-i)和线程数(-t)。例如

$ gemm-benchmark -d 1024 -i 2000 -t 4

使用1024 x 1024矩阵运行基准测试,迭代1,000次,使用4个线程。还可以使用--dgemm选项对dgem,进行基准测试

$ gemm-benchmark -d 1024 -i 2000 -t 4 --dgemm

示例结果

1到16线程

以下表格显示了使用1到16线程在矩阵大小为768时的各种CPU的GFLOPS。

线程 M1 Accelerate M1 Pro Accelerate M1 Ultra Accelerate Ryzen 3700X MKL Ryzen 5900X MKL
1 1340 2061 2177 134 148
2 1226 2583 3427 262 284
4 1102 2685 3788 513 558
8 1253 2381 4344 924 1106
12 1225 2248 4261 989 1555
16 1217 2254 4376 850 1390

依赖关系

~5–11MB
~198K SLoC