【ARM】——Cortex-A57浮点峰值的计算

arm, cortex-a57

1. 什么是浮点峰值

首先阅读这篇博客了解这个浮点峰值的概念。

浮点峰值那些事儿

2. cortex-a57浮点峰值的计算

这里采用:https://github.com/Mengjintao/gflops_benchmark的code进行测试。

这里其实有几个疑问:

  • 为什么要在一个循环里写几条命令
  • 硬件的浮点峰值怎么计算呢?
  • 跑起来只用了单核,那多核的flops又怎么计算呢?

2.1 为什么要在一个循环里写几条命令

这是单条指令的延迟有关,可以下载Cortex-A57 Software Optimization Guide文档,其中有每条指令的延时。

在这里插入图片描述
可以看到FMLA指令的延时是9/10。这里我们改变每个循环中FMLA指令的条数来实际测试一下。注意改变#define OP_FLOATS (88)的值。OP_FLOATS = 2*4*n

; // func2.S 每次循环做 40 次乘法,每条指令处理 4 个 float,共 10 条。
.text
.align 5
.global func2

func2:
.loop2:
    fmla v0.4s, v0.4s, v0.4s
    fmla v1.4s, v1.4s, v1.4s
    fmla v2.4s, v2.4s, v2.4s
    fmla v3.4s, v3.4s, v3.4s

    // fmla v4.4s, v4.4s, v4.4s
    // fmla v5.4s, v5.4s, v5.4s
    // fmla v6.4s, v6.4s, v6.4s
    // fmla v7.4s, v7.4s, v7.4s

    // fmla v8.4s, v8.4s, v8.4s
    // fmla v9.4s, v9.4s, v9.4s
    // fmla v10.4s, v10.4s, v10.4s
    // fmla v11.4s, v11.4s, v11.4s


    subs x0, x0, #1
    bne .loop2
    ret

测试结果:

硬件架构浮点峰值(GFlops)备注
Jetson NanoCortex-A57,armv8a11.39
Jetson tx2Cortex-A57,armv8a16.215759
Jetson tx2Cortex-A57,armv8a6.4794
Jetson tx2Cortex-A57,armv8a12.918
Jetson tx2Cortex-A57,armv8a14.4689
Jetson tx2Cortex-A57,armv8a16.18610
Jetson tx2Cortex-A57,armv8a16.19711

上面的备注就是单次循环中包含的fmla指令的条数,实测大概a57上FMLA的延时大概是10

2.2 硬件的浮点峰值怎么计算呢?

浮点峰值那些事儿的介绍,这里我们是用的FMLA测的。一条FMLA指令针对float32的计算量为:4个float32数 ×( 1次乘法 + 1次加法)× cpu的频率 × cpu的核心数。

前面的程序实测的时候,只有一个cpu核心跑起来了。所以这里我们也只计算一个核心的理论峰值。
在这里插入图片描述
cpu的主频可以通过lscpu命令来看,在tx2上的执行结果:

Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              6
On-line CPU(s) list: 0-5
Thread(s) per core:  1
Core(s) per socket:  3
Socket(s):           2
Vendor ID:           ARM
Model:               3
Model name:          Cortex-A57
Stepping:            r1p3
CPU max MHz:         2035.2000
CPU min MHz:         345.6000
BogoMIPS:            62.50
L1d cache:           32K
L1i cache:           48K
L2 cache:            2048K
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32

可以看到单核的最高主频为:2.0352GHZ

单核理论峰值 = 4 × 2 × 2.0352GHZ = 16.2816Gflops,实测和这都相差不大了。

2.3 如何做多核的flops

暂时还没有看到有人做。。。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值