【发布时间】:2018-09-10 12:59:27
【问题描述】:
我正在尝试使用 SIMD 优化我的代码(在 ARM CPU 上),并且想知道它的算术强度(触发器/字节,AI)和 FLOPS。
为了计算 AI 和 FLOPS,我必须计算浮点运算(FLOPs)的数量。
但是,我找不到任何准确的 FLOP 定义。
当然,mul、add、sub、div 显然是 FLOP,但是移动操作、洗牌操作(例如 _mm_shuffle_ps)、设置操作(例如 _mm_set1_ps)、转换操作(例如_mm_cvtps_pi32) 等?
它们是处理浮点值的操作。我应该把它们算作 FLOPs 吗?如果不是,为什么?
Intel VTune 和 Nvidia 的 nvprof 或 PMU 等分析器通常计算哪些操作?
编辑:
What all operations does FLOPS include?
这个问题主要是关于数学上的复杂运算。
我还想知道处理以浮点值或向量作为输入的“非数学”运算的标准方法。
【问题讨论】:
-
mul、add、sub和div是不是浮点运算。它们对整数进行操作。 FLOPs 以ps或sd等结尾。 -
我应该说
*, +, -, /,我问的是更多关于 FLOP 的一般性问题。 -
你是在问非浮点机器码,如软浮点等是否算作浮点运算。
-
不,我的问题很简单:例如,
_mm_shuffle_ps将 2 个 浮点 向量作为输入,所以这个操作是一个浮点操作。是这样吗?
标签: performance benchmarking simd hpc flops