gpt4 book ai didi

c++ - 将 Freepascal 函数转换为汇编?

转载 作者:行者123 更新时间:2023-11-30 02:45:17 26 4
gpt4 key购买 nike

由于性能问题,我想尝试将 Freepascal 函数(SHA1Update,来自 SHA1 单元)转换为汇编。我使用 Freepascal 2.6.4 和 Lazxarus 1.2.4。

原因是,我有一个循环结构(repeat...until),它将 64Kb 的原始数据 block 从磁盘读取到缓冲区中,然后对其进行哈希处理。没有哈希,我可以以 4Gb p\min 读取磁盘。通过散列,它减慢到刚刚超过 1Gb p\min。所以someone suggested converting the hashing routine to assembly .

在使用高级语言时,我是一个低于平均水平的程序员,更不用说汇编了,但性能改进的潜力促使我至少去询问。

所以我的问题是:是否有程序或脚本可以采用过程或函数并将其神奇地转换为程序集,然后我可以使用 Freepascal 编译器进行编译?我知道 C\C++ 甚至可以使用像 this one 这样的基于 Web 的系统来完成它

最佳答案

汇编确实是您用来优化选定代码序列的工具。但是,由于 native 代码编译器生成机器代码,通常使用中间汇编源代码表示,然后通过汇编器运行,因此使用编译器“神奇地转换”您的代码部分(需要优化)到汇编代码的优势然后链接到程序的其余部分,与使用编译器简单地编译整个程序相比,大约为零——毕竟你使用相同的编译器进行转换。从这个角度来看,编译器就是这样一个“神奇地将其转换为汇编”的程序。出于优化目的,您希望对这些代码部分进行手动编码——并且您需要擅长于此。由于各种原因,如今许多编译器生成的代码比非专家编写的代码执行得更好。一是 objective-c PU 的最佳性能代码非常不同,并且确定特定 CPU 的代码效率必须是什么样子的规则通常极其复杂。作为手工编码员,您需要知道它们之间的区别,才能知道如何编写性能良好的代码。许多编译器都具备这种知识,因此能够生成代码,使一个或另一个 CPU 架构或模型可以从编译器放入代码生成的差异中受益。

通常,通过选择更高效的算法可以获得更好的性能提升。一个更好的算法,用高级编码,通常胜过一个不太合适的算法,用汇编手工编码。因此,我会通过寻找替代和更快的算法来研究使散列过程更快的可能性,而不是在此阶段尝试使用汇编来提高速度 - 将汇编优化视为最后一步,最后一步优化,当其他方式加速你的代码已经用尽了。

关于c++ - 将 Freepascal 函数转换为汇编?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576364/

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