Hi All.
While familiarizing myself with different ways of making my models
concurrent, I ran into something that might be a bug.
given this code, and a 4core machine:
(defn fib [n]
(if (<= n 1)
1
(+ (fib (- n 1)) (fib (- n 2)))))
(defn pow
"from the tiny math library"
[x# y#]
(. java.lang.Math (pow #^java.lang.Double x# #^java.lang.Double
y#)))
(dotimes [t 7]
(time
(let [agents (for [i (range (pow 10 t))] (agent 15))]
(do
(println (pow 10 t) "fib 15 agents send-off")
(doseq [a agents] (send-off a fib))
(apply await agents)))))
I get this output:
1.0 fib 15 agents send-off
"Elapsed time: 1.120026 msecs"
10.0 fib 15 agents send-off
"Elapsed time: 1.853112 msecs"
100.0 fib 15 agents send-off
"Elapsed time: 13.192213 msecs"
1000.0 fib 15 agents send-off
"Elapsed time: 106.954241 msecs"
10000.0 fib 15 agents send-off
"Elapsed time: 1117.189967 msecs"
100000.0 fib 15 agents send-off
"Elapsed time: 11377.972402 msecs"
1000000.0 fib 15 agents send-off
java.lang.OutOfMemoryError: Java heap space (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]
Restarts:
0: [ABORT] Return to SLIME's top level.
1: [CAUSE] Throw cause of this exception
Backtrace:
0: clojure.lang.Compiler.eval(Compiler.java:4127)
1: clojure.core$eval__3503.invoke(core.clj:1463)
2: swank.commands.basic$eval_region__557.invoke(basic.clj:35)
3: swank.commands.basic$interactive_eval__563.invoke(basic.clj:44)
4: clojure.lang.Var.invoke(Var.java:327)
5: user$eval__1383.invoke(Unknown Source)
6: clojure.lang.Compiler.eval(Compiler.java:4116)
7: clojure.core$eval__3503.invoke(core.clj:1463)
8: swank.core$eval_in_emacs_package__266.invoke(core.clj:53)
9: swank.core$eval_for_emacs__339.invoke(core.clj:120)
10: clojure.lang.Var.invoke(Var.java:335)
11: clojure.lang.AFn.applyToHelper(AFn.java:199)
12: clojure.lang.Var.applyTo(Var.java:444)
13: clojure.core$apply__2841.doInvoke(core.clj:374)
14: clojure.lang.RestFn.invoke(RestFn.java:428)
15: swank.core$eval_from_control__269.invoke(core.clj:60)
16: swank.core$spawn_worker_thread__342$fn__370$fn__372.invoke
(core.clj:144)
17: clojure.lang.AFn.applyToHelper(AFn.java:191)
18: clojure.lang.AFn.applyTo(AFn.java:184)
19: clojure.core$apply__2841.doInvoke(core.clj:374)
20: clojure.lang.RestFn.invoke(RestFn.java:428)
21: swank.core$spawn_worker_thread__342$fn__370.doInvoke(core.clj:
142)
22: clojure.lang.RestFn.invoke(RestFn.java:402)
23: clojure.lang.AFn.run(AFn.java:38)
24: java.lang.Thread.run(Unknown Source)
(something goes wrong when sending off a million agents, and for a
while I am only using 1 of the four CPU's.)
(using send or send-off doesn't seem to make a difference here,
performance or crash-wise)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---