Skip to content

Instantly share code, notes, and snippets.

@hozumi

hozumi/bench.clj Secret

Created May 7, 2011 09:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hozumi/3048d90328d3118583a4 to your computer and use it in GitHub Desktop.
Save hozumi/3048d90328d3118583a4 to your computer and use it in GitHub Desktop.
bench
We couldn’t find any files to show.
@odekopoon
Copy link

JDK1.6.0_24 on OSX10.6 at C2D/2.4GHz x 2C, mem 4GB

(def thread-count 300)
(def repeat-num 100000)
$ time java -d32 -server -ms256M -mx256M -cp lib/clojure-1.3.0-beta1.jar:classes bench.core atom-bench
"Elapsed time: 15938.494 msecs"
real 0m17.271s user 0m32.024s sys 0m0.571s

$ time java -d64 -server -ms256M -mx256M -XX:+UseCompressedOops -cp lib/clojure-1.3.0-beta1.jar:classes bench.core atom-bench
"Elapsed time: 19769.618 msecs"
real 0m20.981s user 0m39.054s sys 0m0.719s

$ time java -d32 -server -ms256M -mx256M -cp lib/clojure-1.3.0-beta1.jar:classes bench.core hash-bench
"Elapsed time: 18469.355 msecs"
real 0m19.809s user 0m36.015s sys 0m0.457s

$ time java -d64 -server -ms256M -mx256M -XX:+UseCompressedOops -cp lib/clojure-1.3.0-beta1.jar:classes bench.core hash-bench
"Elapsed time: 64242.953 msecs"
real 1m5.472s user 1m1.936s sys 0m34.415s

(def thread-count 1)
(def repeat-num 30000000)
$ time java -d32 -server -ms256M -mx256M -cp lib/clojure-1.3.0-beta1.jar:classes bench.core ref-bench
"Elapsed time: 66448.203 msecs"
real 1m7.750s user 1m8.639s sys 0m0.497s

$ time java -d64 -server -ms256M -mx256M -XX:+UseCompressedOops -cp lib/clojure-1.3.0-beta1.jar:classes bench.core ref-bench
"Elapsed time: 65525.307 msecs"
real 1m6.693s user 1m7.295s sys 0m0.540s

(def thread-count 5)
(def repeat-num 6000000)
$ time java -d32 -server -ms256M -mx256M -cp lib/clojure-1.3.0-beta1.jar:classes bench.core
"Elapsed time: 97204.37 msecs" ref-bench
real 1m38.541s user 2m55.565s sys 0m12.372s

$ time java -d64 -server -ms256M -mx256M -XX:+UseCompressedOops -cp lib/clojure-1.3.0-beta1.jar:classes bench.core ref-bench
"Elapsed time: 183678.22 msecs"
real 3m4.897s user 3m47.993s sys 1m40.321s

@odekopoon
Copy link

共有資源に高頻度で書き込む並列性のないスレッド間処理をするなら、同時実行できるのがシングルスレッドもしくは、共有しなくて済むような枠組みを考えた方が良さそうです。
適切に動作しないマルチスレッド アプリケーションの一般的なパターン
http://msdn.microsoft.com/ja-jp/library/ee329530.aspx

@hozumi
Copy link
Author

hozumi commented Jul 31, 2011

STMは共有資源に複数のスレッドが書き込みを試みて、共有資源が他のスレッドに既に更新されてれば失敗してやり直すという処理なので、逆に言えば、実行中のスレッドの中の必ず一つは書き込みに成功するということだと思います。
実行中のどの時間を見ても必ず書き込みに成功するスレッドが一ついるということはつまり、
原理的にはシングルスレッドと同じ時間で処理できることを意味していると思います。
シングルスレッドやロック(hash-bench)の時は使われていなかったコアが無駄な計算をするだけで、
処理にかかる時間が劇的に伸びるのはどうもよく理解出来ないです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment