지금까지 동일한 함수를 작성하는 여러 접근법의 속도를 테스트하면서 나는 time
함수를 사용하고 있었으며 일반적으로 다른 함수의 상대적 속도를 잘 보여줍니다 이들은 일반적으로 약 100k 사이클 차이가 있기 때문에).Lisp : 함수의 성능 측정
그러나 factorial
기능에 대한 가장 빠른 방법을 찾으려고 시도했지만 time
은 부족했습니다. 이러한 방법은 단지 10k-30k주기 만 다를뿐 아니라 전체 시간도 약 절반 정도 차이가납니다 (예상되는 것 같습니다).
세 factorial
기능 :) 어떤 사실 인 경우 (
1) 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)))))
는, 나는이 개 질문이 됐을까?
2.) 내가 일반적인 방법으로 더 빠른 기능을 찾았다면 무엇을 할 수있는 가장 좋은 방법이 될까요 (LOC가 속도의 나쁜 지표라고 생각합니다). 아마도 Lisp 바이트 코드의 디스 어셈블리를 보는 방법이 있을까요? 아니면 더 나은, 더 엄격한 방법이 있을까요?
저는 현재 Linux 3.2.0-26, SBCL을 Ubuntu 12.04 x86-64에서 실행하고 있습니다.
사용중인 CL의 구현은 무엇입니까? – JasonFruit
죄송합니다. SBCL을 사용하고 있습니다. – Soyuz