OK, I did something a little bit different, but I think it proves the same
thing we were shooting for.

On a 48-way 4 x Opteron 6168 with 32GB of RAM. This is Tom's "Bowling"
benchmark:

1: multithreaded. Average of 10 runs: 14:00.9
2. singlethreaded. Average of 10 runs: 23:35.3
3. singlethreaded, 8 simultaneous copies. Average run time of said
concurrently running copies: 23:31.5

So we see a speedup of less than 2x running multithreaded in a single JVM
instance. By contrast, running 8 simultaneous copies in 8 separate JVM's
gives us a perfect 8 x speedup over running a single instance of the same
singlethreaded benchmark. This proves pretty conclusively that it's not a
hardware limitation, it seems to me.... unless the problem is that it's
trying to spawn 48 threads, and that creates contention.

I don't think so though, because on an 8-way FX-8120 with 16GB of RAM, we
see a very similar lack of speedup going from singlethreaded to
multithreaded (and it will only be trying to use 8 threads, right?), and
then we see a much better speedup (around 4x - we're doing 8 times the work
in twice the amount of time) going to 8 concurrent copies of the same thing
in separate JVM's (even though I had to decrease RAM usage on the 8
concurrent copies to avoid swapping, thereby possibly slowing this down a
bit):
1. 9:00.6
2. 14:15.6
3. 27:35.1

We're probably getting a better speedup with the concurrent copies on the
48-way node because of higher memory bandwidth, bigger caches (and more of
them), and more memory.

Does this help? Should I do something else as well? I'm curious to try
running like, say 16 concurrent copies on the 48-way node....


    -Josiah

On Wed, Dec 12, 2012 at 10:03 AM, Andy Fingerhut
<andy.finger...@gmail.com>wrote:

> Lee:
>
> I believe you said that with your benchmarking code achieved good speedup
> when run as separate JVMs that were each running a single thread, even
> before making the changes to the implementation of reverse found by
> Marshall.  I confirmed that on my own machine as well.
>
> Have you tried running your real application in a single thread in a JVM,
> and then run multiple JVMs in parallel, to see if there is any speedup?  If
> so, that would again help determine whether it is multiple threads in a
> single JVM causing the slowdown, or something to do with the hardware or OS
> that is the limiting factor.
>
> Andy
>
>
> On Dec 11, 2012, at 4:37 PM, Lee Spector wrote:
>
> >
> > On Dec 11, 2012, at 1:06 PM, Marshall Bockrath-Vandegrift wrote:
> >> So I think if you replace your calls to `reverse` and any `conj` loops
> >> you have in your own code, you should see a perfectly reasonable
> >> speedup.
> >
> > Tantalizing, but on investigation I see that our real application
> actually does very little explicitly with reverse or conj, and I don't
> actually think that we're getting reasonable speedups (which is what led me
> to try that benchmark). So while I'm not sure of the source of the problem
> in our application I think there can be a problem even if one avoids direct
> calls to reverse and conj. Andy's recent tests also seem to confirm this.
> >
> > BTW benchmarking our real application (
> https://github.com/lspector/Clojush) is a bit tricky because it's riddled
> with random number generator calls that can have big effects, but we're
> going to look into working around that. Recent postings re: seedable RNGs
> may help, although changing all of the RNG code may be a little involved
> because we use thread-local RNGs (to avoid contention and get good
> multicore speedups... we thought!).
> >
> > -Lee
>
> --
> 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
> Note that posts from new members are moderated - please be patient with
> your first post.
> 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
>

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
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