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 clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to