Arm Community
Arm Community
  • Site
  • User
  • Site
  • Search
  • User
  • Groups
    • Arm Research
    • DesignStart
    • Education Hub
    • Innovation
    • Open Source Software and Platforms
  • Forums
    • AI and ML forum
    • Architectures and Processors forum
    • Arm Development Platforms forum
    • Arm Development Studio forum
    • Arm Virtual Hardware forum
    • Automotive forum
    • Compilers and Libraries forum
    • Graphics, Gaming, and VR forum
    • High Performance Computing (HPC) forum
    • Infrastructure Solutions forum
    • Internet of Things (IoT) forum
    • Keil forum
    • Morello Forum
    • Operating Systems forum
    • SoC Design and Simulation forum
    • 中文社区论区
  • Blogs
    • AI and ML blog
    • Announcements
    • Architectures and Processors blog
    • Automotive blog
    • Graphics, Gaming, and VR blog
    • High Performance Computing (HPC) blog
    • Infrastructure Solutions blog
    • Innovation blog
    • Internet of Things (IoT) blog
    • Mobile blog
    • Operating Systems blog
    • Research Articles
    • SoC Design and Simulation blog
    • Smart Homes
    • Tools, Software and IDEs blog
    • Works on Arm blog
    • 中文社区博客
  • Support
    • Arm Support Services
    • Documentation
    • Downloads
    • Training
    • Arm Approved program
    • Arm Design Reviews
  • Community Help
  • More
  • Cancel
中文社区
中文社区
中文社区博客 玩转 FLOPS – ARM 如何测量 GPU 计算性能
  • Blogs
  • Forum
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • Jump...
  • Cancel
  • New
中文社区 requires membership for participation - click to join
More blogs in 中文社区
  • ARM中国大学计划博客

  • Arm新闻

  • 中文mbed博客

  • 中文社区博客

  • 恩智浦汽车电子MCU讨论区博客

 

Tags
  • chinese
  • Mali
  • 中文
  • gpu
Actions
  • RSS
  • More
  • Cancel
Related blog posts
Related forum threads

玩转 FLOPS – ARM 如何测量 GPU 计算性能

Song Bin 宋斌
Song Bin 宋斌
October 17, 2013

原文: Flipping the FLOPS - how ARM measures GPU compute performance


玩转 FLOPS – ARM 如何测量 GPU 计算性能

pic g 1.jpg

作者: jemdavies / 2013 年 5 月 15 日上午 8:48 /

现在是时候来谈谈 GPU 中计算性能的测量了。作为旨在为图形行业启蒙与释疑的一系列 ARM 博文中的又一篇,我想谈谈每秒浮点运算数(FLOPS,或者 GFLOPS 或 TFLOPS)的问题。

在过去, tomolson 探讨过每秒三角形数(“无用的图形处理器性能指标”), edplowman 谈论过每秒像素数(“关于原理与像素非像素的情况“),Sean Ellis 阐述过浮点运算精度(“熟练掌控数值范围 - 浮点数格式在图形中的重要性”),希望我们在教育的同时又愉悦了大众。今天,我们来看看计算性能 - 它是一种有用的指标。

竞争是好的…
… 但开放而诚实的竞争更好。GPU 市场竞争激烈,有些公司提供 IP,另一些则自己生产,以跻身于 SoC 竞争中。我爱竞争,没有竞争哪来胜利呢?或者,正如竞争力最强的某人曾经跟我说过:“不赢的话,竞争有什么意义?”(她是一名运动员,但一言以蔽之,这里有许多人想要在他们为之付出的事业中取得胜利。)在这竞争环境之中,我们知道我们的合作伙伴有时要努力了解 GPU 的性能指标。他们需要比较多家供应商的产品,从中找出满足他们需求的一个。这可能是个复杂的话题,但其实也不必像有些人试图制造的那么复杂。我希望通过诚实而开放的指标赢得竞争…

图形是计算
图形实际上是计算密集型问题 - 你必须在其中执行许许多多运算,这也是人们感兴趣于不“仅仅”是利用这些功能来处理图形的原因之一。要绘制图形,我们首先在三维空间中描述一些对象,把这些对象分割为许多三角形,列出三角形中每个顶点的坐标。我们可以争论为何要使用三角形,的确有这样的争论,但三角形比较简单,其中的三个点组成一个确定的平面。接着我们定义一些光源,给予它们类型和位置;我们定义投影模型(摄像机)并给予它一个位置;我们为(组成那些三角形的)对象定义颜色和表面细节。有时,我们添加更多细节;有时,我们为对象制作动画,使它们运动起来。所有这一切之后,我们尝试制作出从该摄像机拍摄的照片,就如它投影到一个二维屏幕上一样。正如你想象的那样,有许多 3-D 等式要处理,还有许多三角函数。我们使用的大多数数字是浮点数,因此我们执行浮点运算的速度对图形性能有很大的影响。当然,这不是唯一的因素,却是很重要的。了解这一点当然很不错。

pic g 2.jpg先描述问题

在我们的 GPU(以及许多其他 GPU)中,上述所有位置中都执行浮点运算。有些是固定函数单元,有些则是可编程单元。此处的一些示例可能有所帮助:在你加载纹理的值时,纹理单元将根据你指定的纹理中的坐标计算内存地址,然后可能在内存中的多个值之间插值,产生你需要的纹理,或许在一些相邻的值之间双线性地进行过滤(做双线性滤波)。而且,如果纹理是 ASTC 等压缩格式,作为该过程的一部分,这些值还必须解压缩。这包含许许多多的计算(整数和浮点数)。对图像而言这很不错,但将这些单元用于更加普通的计算则有点难甚至不可能。

一些 GPU“只”负责图形,不做一般计算。例如,Mali-400 系列的设计面向 OpenGL ES 2.0,其精度要求较低。一些运算需要以 32 位精度执行,一些需要 24 位,另一些则需要 16 位。ARM CPU 的 NEON 上的 OpenCL 可以用作计算指南(可协助进行计算)。

一些 GPU 同时负责图形和计算。例如,Mali-T600 系列 GPU 使用 Midgard 架构(我在上一篇博文中进行了介绍)。在这一架构中,我们有运算(算术)流水线,可以执行 ADD 和 MUL 等指令。我们均衡地混合了标量和矢量 (SIMD) 单元,因此可以像并行处理一样执行多个运算(例如,4 个 FP32,8 个 FP16)。我们也有点乘积指令,以及一组三角函数指令(如 sin、cos 和 tan 等)。你应如何表达 sin() 等三角函数中的浮点运算数量?

Mali-T600 系列是为计算而设计,并且拥有(支持)最新的图形 API,如 OpenCL、OpenGL ES 3.0 和 Microsoft DirectX11,因此它支持完整的 32 位精度浮点运算(符合 IEEE-754-2008 标准)。我们还进行双精度(64 位浮点)运算;而且,顺便提一下,我们也可执行包括 64 位在内的各种整数运算(传统的 GPU 缺乏良好的整数功能)。

总而言之,我们的 GPU 拥有不同的整数和浮点运算性能级别,不同的精度,以及不同的代码利用能力级别。

然后,定义你的指标

pic g 3.jpg现在,该说说这个棘手问题了:如何定义测量 GPU 中进行多少运算的指标:要测量的是什么?目前在 ARM,我们希望包揽一切:毕竟,合作是我们的一件大事情。所以,我已准备好走到这么远:你做什么不那么重要,只要你能展示你的工作(正如英国老师对学生所说的那样,也就是说明你使用的方法)。然而,不说明其数字(即使在附属细则中)的人肯定是在尝试隐藏些什么,结果是什么也藏不了。因此,秉持开放的精神,我们是如何得到我们的数字的?好吧,既然标题是与 FLOPS 相关,此刻我们要把整数运算放到一边。以下是 ARM 的规则:

  1. ARM 仅包含可直接编程的算术运算:着色器编程者接触的经典算术运算,如 ADD、MUL,以及它们的矢量版。
  2. 我们从一个计算着色器中一段真实的代码中统计一个周期内可执行的 ADD 和 MUL 等(包括点乘积运算)的数量。这是我们架构上的 FLOPS 率(以每周期 FLOPS 数来测量)。
  3. 尽管我们可以非常高效地执行一些函数(如 trig),我们不会为这种混合添加些什么 - 否则情况会非常混乱。
  4. 从布局和布线完整的真实综合体中,借助实际的物理 IP 库(如 TSMC 28nm HPM,指定通道长度等),我们获得了最高运算频率。我们公开地指定运行条件(如最高温度、最低电压下的硅模型,Vdd,-10% Vnom 等)。这并不只是一个 PowerPoint 数字:我们的合作伙伴应当能够轻松达到这一频率。对于大多数合作伙伴而言,谁愿意使用更加“典型”的参数,他们应当能轻松超越。如果你希望在需要更多功耗的更高速流程(制程)中实施(实现),你完全可以超越。我们认为这是 IP 供应商的正确做法。芯片制造商将引述他们的芯片可以确保的任何频率。
  5. 我们将每个周期的 FLOPS 数乘以每个核心的运算(算术)流水线数,再乘以核心数,然后乘以频率。这会得出 FLOPS 数。这个数字很大,所以通常我们指定 GFLOPS(千兆个 flops),很快我们将使用 TFLOPS – 我们已在开发 TFLOPS 级核心,将在本年内交付。
  6. 对于 Mali-T600 系列,标题数(重点)是单精度(32 位浮点)。我们引述了第二个数字,它是双精度(64 位)FLOPS。对于大多数“图形”GPU 而言,该 64 位数字比较小。对于我们以高性能计算或超级计算机为目标的 GPU 而言,(我们已被询问过)它可能相同或更大。
  7. 我们也将展示实际上能够包含所有这些运算的着色器代码。我们将展示实际芯片上运行的真实代码与架构FLOPS 率之间的区别。目前,我们可以在实际芯片上获得 97% 的架构 GFLOPS 率。我们相信,与别人相比这个百分比非常高了。或许你知道更好的?
  8. 我们也运行基准测试。如果你需要了解实际代码的执行速度,这一信息对你的用处或许比架构数字大!ARM 喜欢独立的第三方基准测试,有许多用来测量可达到的性能(而不是架构数字)。通常用于计算密集型数字应用的有源自 LINPACK 和 LAPACK BLAS 库的 SAXPY 和 SGEMM,但最近各家公司开始观察消费型设备上的 GPU 计算,例如,通过来自 Kishonti 的 CLBenchmark。这是一个大话题,最好还是留给以后的博文。

我们不做的事情
ARM 不包含固定函数单元的 FLOPS,或者仅从图形中可用的元素(也不包括图形专用单元的运算能力),如纹理单元、混合单元、可变插值、三角形设定和 Z 轴压缩等。

  1. 我们不包含任何松散精度运算。我们只包含完整的 IEEE 兼容运算。有关 IEEE 合规性、精度和取整模型的话题很复杂,此处可能会有很大的混淆性。对此的说明和阐述最好还是放在以后的博文中。
  2. 我们不对计算可能作为指令实施的任何库函数中涉及的运算数量做任何假设。
  3. 我们不引述我们无法从真实布局/综合体中证实的理论最高频率。我们可以提供 EDA 工具报告来佐证我们的说法。
  4. 我们不引述大多数合作伙伴无法合理利用的极热漏电流程(高热高漏电流制程)的最高频率。
  5. 我们不会将我们得到的数字乘以我们圣何塞办公室的邮编,或者左移位我们总部的电话号码…:)

最后,
我已描述了我们是如何定义和生成我们的架构 FLOPS 数的。它应当为你提供了所需的武器,你可以去质疑你供应商计算其结果的方式。希望这将带来实用、有建设性的对话。或许,我们需要一个标准。或许,这将导致我们改变定义数字的方式来迎合别人的方法。这没关系,只要我们对此开诚布公。

我也说明了基准测试在说明现实世界性能中需要扮演的角色。我们需要让业界对哪种基准测试有意义达成共识。太多的基准测试可能会带来困惑。

喜欢我们的方式吗?或者讨厌?认为我们不对?想要建议一些不同看法?想要讲讲别人是怎么做的?请告诉我们。欢迎评论这篇博文。

Anonymous
中文社区博客
  • Armv9-A 构架引入可伸缩矩阵扩展(SME)

    Zenon Xiu (修志龙)
    Zenon Xiu (修志龙)
    原文:https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/scalable-matrix-extension-armv9-a-architecture 作者:Martin Weidmann July 14, 2021 翻译: 修志龙(Zenon Xiu) Arm构架为从超级计算机到广泛的设备带来可伸缩的向量处理…
    • February 9, 2022
  • Arm机密计算架构技术白皮书

    Zenon Xiu (修志龙)
    Zenon Xiu (修志龙)
    作者:Arm 首席应用工程师 David Brooke 原文:https://developer.arm.com/documentation/den0125/0100 1.      概述 在本篇文章中,我们将介绍机密计算(Confidential Computing)在现代计算平台中扮演的角色,并解释机密计算的原理。然后我们将说明 Arm 机密计算架构 (Arm CCA) 如何在 Arm 计算平台中实现机密计算…
    • July 16, 2021
  • Armv8.1-M Pointer Authentication 和 Branch Target Identification 扩展

    Zenon Xiu (修志龙)
    Zenon Xiu (修志龙)
    原文作者:Alan Mujumdar   April 7, 2021 原文链接:https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension 翻译…
    • April 19, 2021