在测量算法时,如果有分区操作,如何计算FOP和浮点数的总数?
例如,n2矩阵乘法,N3 * 2 flops的计算(乘法,添加),假设使用相同的数据集N2,我们将矩阵乘法的乘法操作更改为分区操作,如何计算FLOPS。矩阵乘法的结果是否相同?
a,没有一个标准指定 floating-point操作是。
这是由于以下事实:不同的体系结构可能对不同的操作都有本机支持。
因此,例如,体系结构 a 1 可以支持所有四个基本操作, a 2 仅加法和 a 3 所有基本操作以及指数。
通常,术语浮点操作 高度上下文化并与特定的机器绑定。
但是,您可以通过分别计算各种操作来进行良好的机器独立分析。
这需要一些专业知识和Voodoo,例如加法和减法在一起,因为它们基本上是硬件的操作。
乘法和划分是单独计数的,例如更复杂的操作(指示,三角函数等)。
最后,您将对所有不同的操作都有计数。
例如,将 n × m 矩阵乘以 m × k >· k · m 乘法和 n · k ·( m -1)加法。因此,结果是 n · k · m mul n · k ·( m -1)添加。
从这种"全信息"表达式中,通常是一个很好的结果,您可以通过拿起参考机和度量单位来获得"浮点操作"数量的近似值。<<<<<<<<<</p>
例如,来自英特尔的Skylake微体系结构具有此非常简化的定时表:
Operation Cycles
Addition 0.5
Subtraction 0.5
Division 3
Multiplication 0.5
如果我们将添加作为一个失败的度量单位,我们可以说一个划分是6个添加,因此大约是6个失败。
Operation FLOPs
Addition 1 (By definition)
Subtraction 1
Division 6
Multiplication 1
因此,上面的示例还原为 n · k ·(2·(2· m - 1),因为乘法和添加都只有1个flop去完成。
这是一个简化的视图,真实的机器要复杂得多(例如,Skylake具有向量单元和FMA支持,可能会改变测量和时机的单位)。
无论如何,根据不同类型的操作的表达方式是机器独立的,在制作特定情况时可以将其转换为单个数字。