【发布时间】:2016-11-06 07:34:37
【问题描述】:
由于我对 C++ 和 Lisp 都感兴趣,因此我尝试重现由 Guillaume Michel 编写的 here 提供的基准测试。基准测试基本上是在大阵列上多次执行的 DAXPY BLAS 1 级操作。谢天谢地,完整的代码已发布在 github 上,两种语言的版本大约在一页。
遗憾的是,我发现我无法达到他计算 lisp 的速度。
对于 Linux,他在 C++ 和 Lisp 中得到了类似的结果:
尺寸 | C++ |普通的 Lisp
100,000,000 | 181.73 | 183.9
我的 PC 上的数字(自然)不同:
尺寸 | C++ |普通的 Lisp
100,000,000 | 195.41 | 3544.3
由于我想要进行额外的测量,我使用time 命令启动了这两个程序并得到(缩短):
$ time ./saxpy
real 0m7.381s
$ time ./saxpy_lisp
real 0m40.661s
对于这种明显的差异,我假设了不同的原因。我扫描了两个代码示例,但发现 C++ 和 Lisp 版本之间在算法或数值上没有大的差异。然后我想,buildapp 的使用造成了延迟,所以我直接在 REPL 中启动了基准测试。我最后的办法是尝试另一个版本的sbcl,所以我下载了最新的sbcl-1.3.11 并在那里进行了评估——仍然(优化的)Lisp 版本比它的 C++ 版本需要更长的时间。
我错过了什么?
【问题讨论】:
-
你编译 Lisp 代码了吗?
-
我从 REPL 中尝试(加载“lispfile”),从 bash 中加载 --load 并尝试使用编译后的 (?) file.fasl 文件
-
.fasl文件是编译后的版本。 -
确保在编译时使用
(declaim (optimize (speed 3) (safety 0)))设置最佳编译器优化设置 -
是的,这些都在重要功能中(见github代码)。我也尝试将它设置为全局(就像你建议的那样)——没有太大区别
标签: common-lisp performance-testing sbcl