- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于性能问题,我想尝试将 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/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!