![]() |
1
2
竞争优势。比如,如果你正在为世界上(即将成为)第一游戏公司编写软件。
没有,除非需要某种绝对性能级别,例如,每秒X帧或每秒Y数十亿个多边形。 编辑:根据其他回复,似乎一致认为嵌入式系统(iPhone、Android等)有硬件加速器,当然需要使用汇编。
它们要么写在80年代到90年代,要么在游戏引擎中少量使用(可能占源代码总数的1%-5%)。 编辑:到目前为止,编译器的自动矢量化质量仍然很差。因此,您可能会看到包含向量化内部函数的程序,而且由于它与在实际汇编中编写没有太大的区别(大多数内部函数都有一个到汇编指令的映射),一些人可能只是决定在汇编中编写。 更新:
据传闻,过山车大亨写在99%的汇编。
|
![]() |
2
14
不按特定顺序出现在脑海中的事物:
编辑: 我已经润色了有关优化的措辞。我要强调的是,对于具有大量用户和良好支持的编译器的目标(具有适当的优化),程序集编码器不太可能超过优化器的性能。 在尝试之前,先仔细分析以确定瓶颈的真正位置。掌握了这些信息后,仔细检查假设和算法,因为对所有问题的最佳优化通常是找到更好的方法来处理更大的问题。然后,如果所有其他方法都失败了,那么隔离测试用例中的瓶颈,仔细地对其进行基准测试,并开始在组装中进行调整。 |
![]() |
3
3
在过去,编译器在针对特定体系结构进行优化方面非常差劲,而体系结构则更简单。现在情况正好相反。如今,对于一个深度流水线、分支预测处理器来说,要编写比优化编译器更好的程序集是相当困难的。所以你不会看到太多。有什么短,有什么高的针对性。 简而言之,你可能不需要这样做。如果您认为您这样做了,请分析您的代码以确保 hotspot -如果你只花了0.1%的执行时间,不要仅仅因为某个东西的速度慢而优化它。看看你是否能改进你的设计或算法。如果您在那里没有发现任何改进,或者如果您需要高级语言没有公开的功能,请查看手工编码组件。 |
![]() |
4
3
有些东西只能在汇编程序中完成,不能在C/C++中完成。 这些包括:
在汇编程序中,你也可以比C/C++更好地优化代码(例如Android上的MMECPY是用汇编语言编写的)。 |
![]() |
5
2
您的编译器可能还无法生成新的指令,或者编译器执行了错误的工作,或者您可能需要直接控制CPU。 |
![]() |
6
1
它不是
访问CPU上的系统寄存器或IO端口。 访问BIOS功能。 使用不直接映射到编程语言的专用指令, 例如 SIMD 指令。 提供比编译器生成的代码更好的优化代码。 你通常不需要的前两点,除非你在写操作系统或代码 在没有操作系统的情况下运行。 现代的CPU非常复杂,要找到真正能够编写程序集的人,比编译器所生产的要困难得多。许多编译器都有库,可以让您访问 到更高级的功能,如simd指令,所以现在你通常不需要回到 为此集合。 |
![]() |
7
1
还有一件事值得一提:
|
![]() |
8
-1
程序集可以比任何编译器在某些情况下都能生成的程序集都是非常理想的。 |