Светлячный Dev Лог

Fri 29 July 2016

Простенький тест скорости трех реализаций CommonLisp

Tags: lisp

Постестил скорость SBCL, CCL и Clisp на такой простенькой программке:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
#|-*- mode:lisp -*-|#
#| <Put a one-line description here>
exec ros -Q -- $0 "$@"
|#
(defpackage :ros.script.hello-world.3678767845
  (:use :cl))
(in-package :ros.script.hello-world.3678767845)

(defun some-calculation ()
  (let ((var 0))
    (dotimes (counter 1000000000)
      (setf var (+ 1 var)))))

(defun main (&rest argv)
  (declare (ignorable argv))
  (format t "Testing speed")
  (time (some-calculation)))
;;; vim: set ft=lisp lisp:

Под Clisp

Я за полчаса так и не долждался выполнения программы. Если уменьшить количество итераций на 1000, до 1000000, то:

Real time: 8.407203 sec.
Run time: 6.98737 sec.
Space: 0 Bytes

Под SBCL

Evaluation took:
  2.653 seconds of real time
  2.526610 seconds of total run time (2.508501 user, 0.018109 system)
  95.25% CPU
  6,897,310,042 processor cycles
  0 bytes consed

CCL оказался быстрее SBCL больше чем в три раза

took 736,583 microseconds (0.736583 seconds) to run.
During that period, and with 4 available CPU cores,
     701,307 microseconds (0.701307 seconds) were spent in user mode
       3,977 microseconds (0.003977 seconds) were spent in system mode
 2 minor page faults, 0 major page faults, 0 swaps.

Выводы

Вряд ли из этого можно делать какие-то выводы, кроме того, что использовать Clisp не стоит.

В дополнение, могу сказать, что утилитка roswell, с помощью которой я запускал скрипт, просто прекрасна. Мало того, что она позволяет без проблем ставить разные варианты лиспа, так она ещё и запускаемые файлы умеет компилировать из вашего скрипта. Правда, на скорости выполнения это мало сказывается, но влияет на скорость старта программы. Кстати, в скомпилированном виде, CCL выигрывает у SBCL ещё и по размеру бинарника, примерно в два раза.

Comments !