到目前爲止,在測試寫入相同功能的不同方法的速度時,我一直在使用time
函數,通常它可以很好地指示不同函數的相對速度(因爲它們通常相差約100k週期)。Lisp:測量功能的性能
雖然試圖找到factorial
函數的最快方法,但是,time
一直缺乏。這些方法似乎不僅僅相差10k-30k週期,而且它們的總體時間也相差大約一半(我猜想這是預期的)。
三個factorial
功能:
(defun factorial-recusion (n) ; 1st
(if (equal n 1)
1
(* n (factorial (- n 1)))))
(defun factorial-loop (n) ; 2nd
(let ((solution 1))
(loop for x from n downto 2
do (setf solution (* solution x))
finally (return solution))))
(defun factorial-do (n) ; 3rd
(let ((solution 1))
(do ((x n (1- x)))
((< x 2) (return solution))
(setf solution (* solution x)))))
所以,我想我有兩個問題:
1)哪些方法factorial
應該是最快的(如果有的話實際上是),爲什麼? 2)如果我想通過一般方法找出更快的功能,那麼最好的方法是什麼(出於某種原因,我認爲LOC是速度的一個不好的指標)?也許有一種方法可以查看Lisp字節碼的反彙編?或者,也許有更好,更嚴格的方式?
我目前在Ubuntu 12.04 x86-64上運行Linux 3.2.0-26,SBCL。
您使用的CL的實現是什麼? – JasonFruit 2012-07-21 11:48:15
我正在使用SBCL,對不起! – Soyuz 2012-07-21 11:54:44