gpt4 book ai didi

c - *在实践中* : decent C code, 或体面的手写汇编程序哪个更快?

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:58 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




很久很久以前,在遥远的银河系,我曾经用 Delphi 编写程序,然后如果我需要快速发生某些事情,我会用手写汇编程序编写这些例程。它生成的代码比编译器快得多。

但这是真的吗在实践中还有吗?显然,手写的汇编程序总是至少一样快原则上作为编译的高级代码。但自那些黑暗时期以来,CPU 已经走了很长一段路。现在,如果你想优化你的汇编器,你必须考虑指令的顺序,以便它们可以流水线化或同时运行,分支预测的影响,以及其他一百万件事;我怀疑不可能同时将它们全部保存在人类 RAM 中。

那么这是否意味着如今一个体面的(但不是超人的)程序员通过编写 C 比编写手写汇编程序产生更快的代码,至少在为现代 CPU 编码时?

我想到的另一种可能性。优化是在高级语言变成汇编程序之前发生的,还是之后发生的?如果是之后……会不会是更快地产生手写汇编程序,然后通过编译器的优化过程?

最近当我为编程挑战编写一些代码时出现了这个问题,其本质是生成一个应该在 Raspberry Pi 上尽可能快地运行的例程。我本来可以用汇编程序编写它;但我的猜测是,精心编写的 C 语言会更快,尽管 Pi 处理器在 2014 年并没有那么复杂。

为了使问题更加具体和具体:

  • 假设您想编写速度极快(整数)的数字运算代码以在 Raspberry Pi 上运行。您编写了一些非常好的 C 代码,它们以紧密循环的形式运行来解决问题。是否值得在汇编程序中手工制作它以加快速度,或者在实践中会给你带来一些效率较低的东西?
  • 最佳答案

    在我看来,到目前为止给出的两个答案都是正确的。除其他外,答案取决于我们正在谈论的特定 CPU 架构。架构越复杂,手工编写高效的 ASM 代码就越困难。

    一方面是 CISC 内核,例如 x86。它们有多个执行单元、长管道、每条指令的可变指令延迟等。在许多情况下,对人类来说看起来“干净”或“最佳”的 ASM 代码实际上对于 CPU 来说并不是最佳的,可以通过使用指令来改进或来自处理器手册黑暗角落的技术。编译器“知道”这一点,并且可以生成经过适当优化的代码。诚然,在许多情况下,熟练的人可以改进发出的代码,但使用正确的编译器和优化设置,代码通常已经非常好。此外,使用手头的 C 代码,您无需为每一代新的 CPU 手动重新优化它(是的,优化通常取决于特定的 CPU 系列,而不仅仅是指令集),所以用 C 编写是一种“面向 future ”您的代码。

    另一方面是简单的 RISC 内核,例如 8051(或其他简单的 8 位 Controller )。它们具有更简单的调度语义和更小的指令集。编译器在这里仍然做了不错的优化工作,但是手动编写一个像样的 ASM 代码(或修复发出的代码中的性能问题)也简单得多。

    关于c - *在实践中* : decent C code, 或体面的手写汇编程序哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469489/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com