Хамелеончеги

Sep 28, 2010 15:09

В инете есть весьма популярный хуеизмеритель для языков программирования, на который любит ориентироваться школота: http://shootout.alioth.debian.org

Собственно что - для задачи chameneos-redux там отсутствует милый нашему сердцу Lisp SBCL, поэтому я кой-что набросал.

Кой-что набросанное )

chameneos-redux, code, java, lisp, question, shootout, common lisp

Leave a comment

dmitry_vk September 28 2010, 17:41:03 UTC
Протестил у себя:

$ 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

swizard September 28 2010, 17:52:25 UTC
Ого, неожиданный результат. А у тебя машина двухъядерная или четырех?

Хотя, возможно, дело в том, что у меня sbcl 1.0.34 и freebsd. Может, что-то из этого фейлит.

Reply

dmitry_vk September 28 2010, 17:57:07 UTC
Core 2 Duo T5870.
Если сделать вот так:
--- 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

dmitry_vk September 28 2010, 17:57:53 UTC
>А у тебя машина двухъядерная или четырех?

2 ядра.

Reply

swizard September 28 2010, 19:02:48 UTC
Есть смутное подозрение, что, чем меньше процессоров, тем лучше будет результат :) Может, и правда CAS подводит.

Reply

permea_kra September 29 2010, 03:49:01 UTC
на rsdn какой-то деятель прибивал потоки гвоздями к ядру, получал немеренную скорость.

Reply

swizard September 29 2010, 12:03:29 UTC
Да, я привел в посте ссылку: http://www.rsdn.ru/forum/cpp/3539197.1.aspx

В sbcl я не знаю, как работать с affinity, вполне вероятно, что и никак :(

Reply


Leave a comment

Up