c语言矩阵乘法_perf测试矩阵乘法

2f6dfc5da7861775a074b1d6012bd0ff.png

介绍

perf是一个测试CPU运行时各项指标(比如cache-miss,band-width)的工具。perf从CPU的Performance Monitor Unit(PMU)计数器中读取这些信息,然后输出。

注意:由于各个厂家的生产CPU的标准不同,perf读取的性能种类也会有一定的差别。

矩阵乘法

在这里主要测试三种矩阵乘法的相关性能——传统乘法、分治算法、Strassen算法。程序都使用C语言写成。

矩阵乘法不是重点,我把代码放在最后了。

perf测试

三种矩阵乘法的程序使用gcc编译之后命名为p1、p2、p3,使用下面三条指令测试三个程序的相关性能:

$ sudo perf stat ./p1
$ sudo perf stat ./p2
$ sudo perf stat ./p3

以p1的结果为例,perf输出如下

Performance counter stats for './p1 -e cache-misses':

            176.70 msec task-clock                #    0.990 CPUs utilized          
                26      context-switches          #    0.147 K/sec                  
                 1      cpu-migrations            #    0.006 K/sec                  
               396      page-faults               #    0.002 M/sec                  
       397,184,949      cycles                    #    2.248 GHz                      (81.90%)
           566,738      stalled-cycles-frontend   #    0.14% frontend cycles idle     (83.25%)
       269,961,726      stalled-cycles-backend    #   67.97% backend cycles idle      (84.20%)
     1,103,594,689      instructions              #    2.78  insn per cycle         
                                                  #    0.24  stalled cycles per insn  (84.17%)
        27,099,584      branches                  #  153.369 M/sec                    (84.18%)
           101,006      branch-misses             #    0.37% of all branches          (82.29%)

       0.178496560 seconds time elapsed

       0.177966000 seconds user
       0.000000000 seconds sys

三个乘法算法的比较

我是AMD Ryzen 5 3500U的CPU。貌似它不支持cache-miss

6a2e15bd2f3dedfc4eaa7bc168cd8be9.png

最终三个矩阵乘法的算法的部分性能如下。传统算法是300 * 300的矩阵,剩下两种都是512 * 512的矩阵,因此可能在总体数据上不能和传统乘法作比较,但是在平均值上还是可以比较的。

ba2330e0ffcb39f440b9fee80de2ad28.png

附录代码

传统矩阵乘法

#include 

分治算法

#include 

Strassen算法究极长,我放在网站上了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值