- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被要求测量一个在多 CPU 系统上求解微分方程的 Fortran 程序的性能。我的雇主坚持要求我测量 FLOP/s(每秒 float 操作)并将结果与基准进行比较( LINPACK ),但我不相信这是正确的方法,只是因为没有人可以向我解释什么是 FLOP .
我对 FLOP 到底是什么进行了一些研究,得到了一些非常矛盾的答案。我得到的最受欢迎的答案之一是“1 FLOP = 加法和乘法运算”。真的吗?如果是这样,那么从物理上来说,这到底意味着什么?
无论我最终使用什么方法,它都必须是可扩展的。代码的某些版本解决了具有数百万个未知数的系统,并且需要几天的时间才能执行。
在我的案例中,还有哪些其他有效的衡量性能的方法(我的案例摘要是“fortran 代码在数百个 CPU 上反复进行数天的大量算术计算)?
最佳答案
只要您准确理解它衡量的内容,这是一个相当不错的性能衡量标准。
FLOPS,顾名思义,是每秒的 float 操作数,FLOP 的具体构成可能因 CPU 的不同而不同。 (例如,某些 CPU 可以将加法和乘法作为一项运算执行,而其他 CPU 则不能)。这意味着作为一种性能衡量标准,它与硬件相当接近,这意味着 1) 您必须了解您的硬件才能在给定架构上计算理想的 FLOPS,并且您必须了解您的算法和实现以弄清楚如何计算它实际上包含许多浮点运算。
无论如何,它都是检查 CPU 利用率的有用工具。如果您知道 CPU 的理论峰值性能(以 FLOPS 为单位),您就可以计算出使用 CPU 浮点单元的效率,而浮点单元通常是最难有效利用的单元之一。运行 CPU 能够执行的 FLOPS 30% 的程序有优化的空间。除非您更改基本算法,否则以 70% 运行的效率可能不会提高很多。对于像您这样的数学密集型算法,这几乎是衡量性能的标准方法。您可以简单地测量程序运行所需的时间,但这根据 CPU 的不同而有很大差异。但是,如果您的程序的 CPU 利用率为 50%(相对于峰值 FLOPS 计数),那么这是一个更恒定的值(在完全不同的 CPU 架构之间它仍然会有所不同,但它比执行时间更加一致)。
但是,知道“我的 CPU 能够实现 X GFLOPS,而我实际上只实现了其中的 20%”,这在高性能软件中是非常有值(value)的信息。这意味着除浮点运算之外的其他东西会阻碍您,并阻止 FP 单元有效工作。由于 FP 单元构成了大部分工作,这意味着您的软件有问题。
衡量“我的程序在 X 分钟内运行”很容易,如果你觉得这是 Not Acceptable ,那么当然,你可以说“我想知道我是否可以削减 30%”,但你不知道这是否可能,除非您准确计算出正在完成多少工作,以及 CPU 在峰值时的能力。如果您甚至不知道 CPU 是否能够从根本上每秒运行更多指令,您需要花费多少时间来优化它?
由于 FP 操作之间存在过多的依赖关系,或者存在过多的分支或类似情况,从而妨碍高效调度,因此很容易阻止 CPU 的 FP 单元被有效利用。如果这就是阻碍您实现的原因,您需要知道这一点。您需要知道“我没有获得应有的 FP 吞吐量,因此很明显,当 CPU 准备好发出 FP 指令时,我的代码的其他部分正在阻止 FP 指令可用”。
为什么需要其他方法来衡量性能?仅仅按照老板的要求计算出 FLOPS 计数有什么问题吗? ;)
关于performance - 什么是 FLOP/s?它是衡量性能的一个很好的指标吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57742787/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 8年前关闭。 Improve t
暂时忘记能力的定义,只关注能力的“检查”(使用“授权!”),我看到 CanCan 添加了大约 400 毫秒,用于简单地检查用户是否具有特定的能力主题/模型。 这是预期的吗(我假设不是)?或者,有没有可
我正在阅读有关 Swift 的教程 ( http://www.raywenderlich.com/74438/swift-tutorial-a-quick-start ),它预定义为不显式设置类型,因
这主要是由于对 SQL 问题的回答。由于性能原因,有意省略了 UDF 和子查询。我没有包括可靠性并不是说它应该被视为理所当然,但代码必须工作。 性能永远是第一位的吗?提供了许多以性能为主要优先事项的答
我已经编写了一个简单的测试平台来测量三种阶乘实现的性能:基于循环的,非尾递归的和尾递归的。 Surprisingly to me the worst performant was the loop o
我已将 ui-performance 插件应用到我的应用程序中。不幸的是,在开发模式下运行应用程序时它似乎不起作用。例如,我的 javascript 导入是用“vnull”版本呈现的。 例如 不会
我有一个我操作的 F# 引用(我在各处添加对象池以回收经常创建和删除的短期对象)。我想运行结果报价;现在我使用了 F# PowerPack,它提供了将引用转换为表达式树和委托(delegate)的方法
我正在尝试在 Spark 服务器上运行 SparklyR 库中的机器学习算法。 1 个簇 8 核 24G内存 Ubuntu 16.04 星火2.2 独立配置 1名师傅/2名 worker 每个执行器的
我有一个数据库(准确地说是在 postgres 上运行),具有以下结构: user1 (schema) | - cars (table) - airplanes (table, again) .
我的应用程序在我的 iPad 上运行。但它的表现非常糟糕——我的速度低于 15fps。谁能帮我优化一下? 它基本上是一个轮子(派生自 UIView),包含 12 个按钮(派生自 UIControl)。
在完成“Scala 中的函数式编程原则”@coursera 类(class)第 3 周的作业时,我发现当我实现视频类(class)中所示的函数联合时: override def union(tha
我正在重构我的一个 Controller 以使其成为一项服务,我想知道不将整个服务容器注入(inject)我的 Controller 是否会对性能产生影响。 这样效率更高吗: innova.path.
我有一个要显示的内容很大的文件。例如在显示用户配置文件时, 中的每个 EL 表达式需要一个 userId 作为 bean 的参数,该参数取自 session 上下文。我在 xhtml 文件中将这个 u
我非常了解 mipmapping。我不明白(在硬件/驱动程序级别)是 mipmapping 如何提高应用程序的性能(至少这是经常声称的)。在执行片段着色器之前,驱动程序不知道要访问哪个 mipmap
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: What's the (hidden) cost of lazy val? (Scala) Scala 允许定义惰
一些文章建议现在 build() 包含在 perform() 本身中,而其他人则建议当要链接多个操作时使用 build().perform()一起。 最佳答案 build() 包含在 perform(
Postgres docs说 For best optimization results, you should label your functions with the strictest vol
阅读Zero-cost abstractions看着 Introduction to rust: a low-level language with high-level abstractions我尝
我想在 MQ 服务器上部署 SSL,但我想知道我当前的 CPU 容量是否支持 SSL。 (我没有预算增加 CPU 内核和 MQ PVU 的数量) 我的规范: Windows 2003 服务器 SP2,
因此,我在 Chrome 开发者工具 的性能 选项卡内的时间 部分成功地监控了我的 React Native 应用程序的性能。 突然在应用程序的特定重新加载时,Timings 标签丢失。 我已尝试重置
我是一名优秀的程序员,十分优秀!