【问题标题】:Fortran Opcode Map? Or "Big O" notation or something similar?Fortran 操作码映射?还是“Big O”符号或类似的东西?
【发布时间】:2016-01-06 12:09:42
【问题描述】:

我正在寻找某种类型的映射或文件,以说明计算机在 Fortran 中运行某些内在函数和循环所必须完成的工作量。例如:运行基本 if-then 语句检查布尔值(或逻辑值)所需的决策数量。以及计算加法和乘法等基本算术函数需要多少决策。

我知道在 Assembly 中它通常被称为 OpCode Map,但我意识到时间会根据计算机的速度而有所不同,因此我正在寻找更类似于算法的“Big O”表示法的东西。

我的主要问题是我正在用 10000 多个时间步长映射粒子的位置,并将信息写入文件,然后绘制轨迹图。我很想知道这个程序中的具体时间延迟是多少,即 if 语句本质上是否比循环做出更多的决定?我想让我的代码尽可能地模块化和语法简单,而不会使程序(尤其是将来)在超级计算机上运行通常需要 4 个小时以上。

【问题讨论】:

  • 答案可能是“所有内在函数的 O(1)”。你有任何明显不正确的例子吗?如果是,请将其包含在您的问题中。这将阐明您的需求。
  • 用一个体面的优化编译器代码用做同样事情的 do 循环替换 if 语句将生成执行相同的机器代码,如果不是完全相同的话。我建议不要担心单个语句的成本,而是担心您使用这些语句实现的算法的大 O 成本。

标签: fortran big-o fortran90 fortran77 opcode


【解决方案1】:

操作码映射是将机器码字节映射到 insn 助记符的表。也许您正在考虑一个指令时序表,例如Agner Fog's?很少有指令具有数据相关时序。许多 CPU 中的除法是可变延迟的,对于更简单的操作来说延迟更短。

如果您想了解如何让程序运行得更快,您应该阅读 Agner Fog 的优化 C++ 指南,并将其应用于 Fortran。我忘记了他涵盖了多少高级别的东西(比如缓存阻塞,又名循环平铺)。

【讨论】:

  • 您的链接无效,我收到未找到服务器的错误。绝对不是我的互联网连接,所以必须是链接。
  • @Kelly:哎呀,有 og 而不是 org。这是许多性能问题的答案,我只需输入它,而不是打开并粘贴它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多