我想知道的是,我们如何才能在今天仍然以生产的方式利用集会?
当程序集的性能优于C时,在程序集中而不是在C中编写项目的一部分似乎是可行的,即使这将是C/C++项目的一部分。我说的不是纯粹的组装项目
我也指的是当今的任何软件,不管是人工智能、图像处理、电子游戏等等,除了为嵌入式系统编写微芯片外,还有今天需要组装的任何领域。
注:请不要解释什么是装配,而是如何利用它在C/C++项目的各个领域,我也是最近毕业的CS&AI。我也有人工智能,电子游戏和计算机图形学的背景。如果有用的话,我会有兴趣在我的项目中使用它。
发布于 2018-10-26 09:41:50
大会是广泛避免的。与高级语言相比,编写起来要困难得多,而且也不能明显地提高这种困难的性能。是的,最优秀的程序集程序员可能会比优化编译器编写更好的程序集,但这个编译器比绝大多数程序员要好得多。
编写非常快的程序集的困难在于,这需要非常详细地了解您所针对的处理器系列。不仅在“x86-64体系结构”的层次上,而且在“Skylake微体系结构”的层次上。一个装配指令的成本也取决于围绕它执行的指令。优化编译器有合适的成本模型,可以很好地利用处理器流水线。
这样就有两种情况可以适合编写程序集:
最后,编写程序集或使用矢量化可能不一定会使代码运行得更快。你还需要了解微结构。例如,使用SIMD指令甚至可以使代码运行得更慢,因为多个核心可能共享一个向量单元,从而将这些指令变成瓶颈。
与任何性能工作一样,不要盲目地“优化”:
当软件以易于理解的方式编写时,优化就更容易了。最大的胜利不是来自于更快地做同样的事情,而是来自于找到避免不必要的工作的方法。编写程序集与此目标背道而驰,因为它使软件更难理解。
发布于 2018-10-26 06:53:52
即使在嵌入式系统中,现在也很少使用组装。要掌握比现代优化编译器生成的代码更好的手工组装代码是非常困难的,而当您瞄准更多现代处理器时,这种情况就变得更糟了。
在我的经验中,只有当您需要更多地控制指令和/或寄存器的使用时,程序集才会被使用。这里的主要示例来自操作系统领域,您可能希望在内核中执行编译器无法发出的特权指令,或者需要处理特殊寄存器(如程序计数器或堆栈指针)来实现任务切换。
https://softwareengineering.stackexchange.com/questions/380587
复制相似问题