Common lisp 优化SBCL应用程序以提高速度

Common lisp 优化SBCL应用程序以提高速度,common-lisp,sbcl,Common Lisp,Sbcl,我刚刚完成并测试了一个常见lisp应用程序的核心,现在想对其进行速度优化。它与SBCL一起工作,并使用CLO 有人能概述一下优化我的代码以提高速度的方法吗 我从哪里开始?我只需要提供一些全局声明,还是需要用每个绑定的类型信息来扩展代码?有没有办法找出我的代码中哪些部分可以通过进一步的类型信息编译得更好 该程序大量使用单个一维数组0..119,在该数组中,它将CLOS实例四处移动 谢谢你的提前 在真空中进行优化不是一件好事,因为你可以通过引入丑陋来让事情快一点点 如果它不够快,那么定义成功的含义是

我刚刚完成并测试了一个常见lisp应用程序的核心,现在想对其进行速度优化。它与SBCL一起工作,并使用CLO

有人能概述一下优化我的代码以提高速度的方法吗

我从哪里开始?我只需要提供一些全局声明,还是需要用每个绑定的类型信息来扩展代码?有没有办法找出我的代码中哪些部分可以通过进一步的类型信息编译得更好

该程序大量使用单个一维数组0..119,在该数组中,它将CLOS实例四处移动


谢谢你的提前

在真空中进行优化不是一件好事,因为你可以通过引入丑陋来让事情快一点点

如果它不够快,那么定义成功的含义是很有帮助的,这样你就知道什么时候停止

记住这一点,一个好的第一步是在profiler(sbsprof)下运行您的项目,以了解时间花在哪里。如果是在泛型算术中,它可以帮助在内部循环中明智地使用模运算。如果是在CLOS中,那么切换到关键数据位的结构可能会有所帮助。任何最浪费的东西都会引导你在优化方面的努力


我认为,如果在分析之后,您发布一个后续问题,大意是“我的程序的大部分时间都花在
,如何使其更快?”

正如所问的,这真的太宽泛了:“可能的答案太多,或者好的答案对于这种格式来说太长。请添加详细信息以缩小答案集或隔离可以在几段中回答的问题。“如果您有一段特定的代码,您正试图优化它,请展示它并描述它的问题所在。(尽管,如果代码已经运行,这可能是一个更好的问题)关于优化的一般注意事项:注意。优化的好处取决于您正在优化的程序部分占用了多少运行时。是的,您很可能可以做一些全局性的事情,但在探查器中运行代码并找出您花费最多的地方,可能会更好地利用您的时间然后优化这一部分,不仅仅是类型声明,还有算法更改、内存分配更改等。我不关心算法的改进。这是另一个主题。但我知道我必须更详细地说:这个程序是一个象棋程序。这类软件的大部分功能是移动棋子k和forth。该电路板被表示为一个由120个CLOS对象组成的一维数组。查看反汇编结果表明,由于缺乏类型信息,索引的处理远远不是最佳的。我想知道如何通过添加一些来改进代码。我必须将其放置在何处?你是对的,Xach。因此我必须更具体地说:大多数ime用于从数组中窥视CLOS对象并将其移动到其他位置。这是纯整数运算和寻址。如何使其更快?定义数组索引类型并将索引变量声明为该类型可能会有所帮助。
(deftype array index()
(mod,array dimension limit)`和
(declare(键入数组索引i j k))
例如。