0

阅读一篇关于Lost Programming Skills的文章,作者提出了这个聊天:

我:你需要多少马力?
瑟:我不知道。
我:让我们看看,你的主循环中有多少行代码?
东南:10,000。
我:什么语言?
SE:Fortran
Me:好的,每行 Fortran 大约 10 行机器代码,所以每个循环有 100,000 条指令;循环每秒执行多少次?
SE:每 1/20 秒。
我:好的,那就是 20 x 100,000 = 2mops(这比我们当时的任何东西都快),也许我们最好重新考虑一下。

这让我想知道,现代语言的数量是多少,比如 Ruby?如何发现?

4

4 回答 4

0

对于 X=" C# ",您可能需要查看 Faster Managed Code: Know What Things Cost from Microsoft。它说,(特定的)现代语言在实际接触硬件之前已经过大量优化。

于 2012-09-12T12:26:46.103 回答
0

我不认为会有一个确切的数字。说“对于语言 x 编译的二进制文件每个源代码行有 y 行”。但如果你仍然想知道可能是你可以拿一个很大的不。编译的代码和相应的源代码,并找出每个源代码行的平均值。您可以使用任何二进制编辑器打开二进制文件以查看它生成了多少行。例如。奥利德

于 2011-08-16T18:35:17.910 回答
0

在聊天中,他们试图估计 CPU 性能。如果您知道 CPU 性能和循环的执行时间,您可以获得每个循环和每行的 CPU 命令数。聊天中的计算并不精确。即使对于 ruby​​,您也可以进行类似的不精确计算。请注意,说一个 fortran 行是 10 个 CPU 命令是错误的,但对于某些循环来说是平均的,这是真的。

估计你的循环在 ruby​​ 中所花费的时间。在循环时间上乘以 CPU 性能(每秒操作数)。您将获得每秒操作数。将每秒操作数除以循环中的行数。这就是你的循环价值。

于 2012-09-12T12:19:10.163 回答
0

就确定一段代码需要多长时间执行而言,这甚至不再适用于 Fortran!如果你用 Fortran 90 写这个:

SUBROUTINE foo(x, y)
  IMPLICIT NONE
  REAL, DIMENSION(:), INTENT(IN) :: x
  REAL, DIMENSION(:), INTENT(OUT) :: y
  y = EXP(x)
END SUBROUTINE foo

根据y = EXP(x)数组的大小xy. 任何带有向量赋值的语言也是如此。

于 2011-08-16T19:46:32.620 回答