В инете есть весьма популярный хуеизмеритель для языков программирования, на который любит ориентироваться школота:
http://shootout.alioth.debian.org Собственно что - для задачи
chameneos-redux там отсутствует милый нашему сердцу Lisp SBCL, поэтому я кой-что набросал.
(
Кой-что набросанное )
$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)
$ time java -server chameneosredux 6000000 > /dev/null
real 0m4.875s
user 0m8.983s
sys 0m0.057s
$ sbcl --version
SBCL 1.0.42.gentoo-r0
$ sbcl --eval '(load (compile-file "ch.lisp"))' --eval '(save-lisp-and-die "ch" :executable t :toplevel (function chameneos-redux::main))' > /dev/null
$ time ./ch 6000000 > /dev/null
real 0m3.492s
user 0m6.190s
sys 0m0.640s
Reply
Хотя, возможно, дело в том, что у меня sbcl 1.0.34 и freebsd. Может, что-то из этого фейлит.
Reply
Если сделать вот так:
--- ch.orig.lisp 2010-09-28 21:54:25.553614569 +0400
+++ ch.lisp 2010-09-28 21:54:38.400614779 +0400
@@ -67,10 +67,8 @@
(defmacro spin-wait (condition)
`(loop
- :repeat 16384
:do (when ,condition
- (return))
- :finally (loop :until ,condition :do (sb-thread:thread-yield))))
+ (return))))
#+x86-64
(defstruct atomic
, то получатся результаты, аналогичные явовским:
$ time ./ch 6000000 > /dev/null
real 0m4.311s
user 0m8.305s
sys 0m0.085s
Reply
2 ядра.
Reply
Reply
Reply
В sbcl я не знаю, как работать с affinity, вполне вероятно, что и никак :(
Reply
Leave a comment