“将结果与基准进行比较”并做什么?
FLOPS 意味着你需要
1) 每个工作单元的 FLOPs。
2) 该工作单元的时间。
假设您有一些输入文件通过某个循环执行 1,000 次迭代。循环是一个方便的工作单元。它被执行了 1000 次。需要一个小时。
循环有一些加法和乘法,还有一些除法和平方根。您可以计算加法、乘法和除法。您可以在源代码中计算它,查找 +、* 和 /。你可以从编译器中找到汇编语言的输出,并在那里计算它们。你可能会得到不同的数字。哪一个是对的?问你的老板。
您可以计算平方根,但您不知道它在乘法和加法方面的真正作用。因此,您必须执行基准乘法与平方根之类的操作,以了解平方根需要多长时间。
现在您知道循环中的 FLOPS。而且您知道运行 1,000 次的时间。你知道每秒 FLOPS。
然后您查看 LINPACK 并发现您的速度较慢。怎么办?你的程序不是 LINPACK,它比 LINPACK 慢。很有可能您的代码会变慢。除非您的代码是在与 LINPACK 相同的年数内编写和优化的,否则您的速度会变慢。
这是另一部分。您的处理器针对各种基准测试有一些定义的 FLOPS 评级。您的算法不是这些基准之一,因此您达不到基准。这很糟糕吗?或者这是不是基准的明显后果?
可行的结果是什么?
针对某些基准代码库的测量只会告诉您您的算法不是基准算法。已成定局,你会有所不同;通常较慢。
显然,针对 LINPACK 进行测量的结果将是 (a) 你与众不同,因此 (b) 你需要优化。
只有当对自己进行测量时,测量才真正有价值。不是一些假设的指令组合,而是您自己的指令组合。衡量自己的表现。做出改变。看看你的表现——与你自己相比——是变好还是变坏。
翻牌没关系。重要的是每单位工作的时间。您永远无法匹配硬件的设计参数,因为您没有运行硬件设计人员所期望的基准。
LINPACK 无关紧要。重要的是您的代码库以及您为改变性能所做的更改。