<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Minrk,<br>
    Thanks for the hint, <br>
indeed numpy array did the trick for bandwidth unleashing, I confirm
with a numpy array of 62500 float 64<br>
in case of machine"A" has controller and has 2 ipengines
<br>
pull FOO from machine"A" 2 engines 8.27ms   (2*500kB/8.27.10e-3 =&gt;
120MB/s)<br>
pull FOO from machine"A" 1 engine  7.26ms    (500kB/2.7 =&gt; 68MB/s) 
looks much more better<br>
<br>
and with a numpy array of 500000 float 64<br>
pull FOO from machine"A" 2 engines 44 ms    (~181 MB/s)<br>
pull FOO from machine"A" 1 engine  23 ms    (~173 MB/s) <br>
<br>
else I tried to switch to 'pickle' but doesn't change things. I
configure on the command-line:<br>
on a local machine setup with 4 xterm console:<br>
ipcontroller --ip='*' --Session.packer='pickle'<br>
ipengine --Session.packer='pickle'<br>
ipengine --Session.packer='pickle'<br>
ipython --Session.packer='pickle'<br>
<br>
then from ipython:<br>
<br>
from IPython.parallel import Client<br>
rc = Client(packer='pickle')<br>
dview=rc[:]<br>
dview.execute("FOO=[0.0 for i in xrange(62500)",block=True)  #  62500 *
float 64 -&gt; 500kB of data to transfer<br>
[None,None]<br>
T=time.time();tmp=dview.pull('FOO');print time.time() - T    # for 2
ipengines<br>
3.4 s<br>
T=time.time();tmp=dview.pull('FOO',0);print time.time() - T # for 1
ipengine<br>
2.5 s<br>
<br>
I will continue to play arround, lots of things to learn anyway.<br>
<br>
Thanks again,<br>
    Joe<br>
<br>
<br>
On 08/08/2011 11:31, MinRK wrote:
<blockquote
 cite="mid:CAHNn8BXGVgK5LewaNykJgEP9Bv5B1DH-prPe0zGRfsPVV+kLtg@mail.gmail.com"
 type="cite">These are indeed interesting numbers, thanks for running
them!  The one thing to be careful of is that IPython uses JSON to
serialize by default.  If you are on Python 2.6, the stdlib json is
*extremely* slow.  IPython will prefer jsonlib/jsonlib2 or more recent
simplejson if you have them, all of which are significantly faster.  If
you are concerned with serialization performance, you can specify a
different serialization scheme, such as cPickle, which you can activate
with:
  <div><br>
  </div>
  <div>c.Session.packer='pickle' in your config files or on the
command-line (you will then also have to specify `rc =
Client(packer='pickle') when you create your Client`</div>
  <div><br>
  </div>
  <div>When I am checking performance limits, I tend to use <a
 moz-do-not-send="true" href="http://msgpack.org/" target="_blank">msgpack</a>,
which I enable with:</div>
  <div><br>
  </div>
  <div>c.Session.packer='msgpack.packb'</div>
  <div>c.Session.unpacker='msgpack.unpackb'</div>
  <div><br>
  </div>
  <div>in my config files.</div>
  <div><br>
  </div>
  <div>(again, now you have to do: `rc = Client(packer='msgpack.packb',
upacker='msgpack.unpackb')`  I will get the config properly hooked up
to the Client soon, so it will inherit correctly from the controller)</div>
  <div><br>
  </div>
  <div>Serializing a list of ints is more a test of the message
serialization scheme than IPython's throughput, because pretty much the
whole time will be spent making a giant JSON list (pickle should be
much faster).  If you really want to test the raw throughput of
IPython+ØMQ, you should try sending numpy arrays, which are supported
with zero-copy sends, that allow us to reach ~Gb limits on unimpressive
laptops:</div>
  <div><br>
  </div>
  <div>rc = Client()</div>
  <div>dview = rc[:]</div>
  <div>with dview.sync_imports():</div>
  <div>    import numpy</div>
  <div>dview.execute("foo=numpy.random.random(62500)", block=True) #
8-byte floats</div>
  <div>%time dview.pull('foo', block=True);</div>
  <div><br>
  </div>
  <div>-MinRK</div>
  <div><br>
  </div>
  <div>
  <div class="gmail_quote">On Sun, Aug 7, 2011 at 19:38, RICHARD
Georges-Emmanuel <span dir="ltr">&lt;<a moz-do-not-send="true"
 href="mailto:perspective.electronic@gmail.com" target="_blank">perspective.electronic@gmail.com</a>&gt;</span>
wrote:<br>
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi
Minrk,<br>
    <br>
first of all congratulation to all the ipython team for the great work<br>
you did with the release 0.11, and ZMQ 2.1.7. I'm a fan.<br>
    <br>
I tried the parallel with direct views, that's great.<br>
    <br>
with a machine A (192.168.1.4)<br>
1)    ipcontroller --ip='*'<br>
from machine"A" I remote start ipengine on machine"B" (192.168.1.200)<br>
2)    ssh <a moz-do-not-send="true" href="mailto:root@192.168.1.200"
 target="_blank">root@192.168.1.200</a> ipengine<br>
--file=/sharedMachineAfs/root/.config/ipython/profile_default/security/ipcontroller-engine.json<br>
&amp;<br>
(I do the point 2)  twice to get 2 ipengines, I also tried in local with<br>
only machine"A")<br>
    <br>
then I start ipython to start a client, and I want to evaluate the<br>
bandwith (and latency in a second step).<br>
    <br>
import time<br>
from IPython.parallel import Client<br>
rc = Client()<br>
dview=rc[:]<br>
dview.execute("FOO=[0.0 for i in xrange(62500)",block=True)  #  62500 *<br>
float 64 -&gt; 500kB of data to transfer<br>
[None,None]<br>
T=time.time();tmp=dview.pull('FOO');print time.time() - T    # for 2<br>
ipengines<br>
T=time.time();tmp=dview.pull('FOO',0);print time.time() - T # for 1<br>
ipengine<br>
    <br>
in case of machine"A" as controller and machine"B" as 2 ipengines<br>
pull FOO from machine"B" 2 engines 9.03 seconds        (2*500kB/9.03
=&gt;<br>
110kB/s)     on a network 100Mb/s (12.MB/s)<br>
pull FOO from machine"B" 1 engine 4.7     seconds        (500kB/4.7
=&gt;<br>
106kB/s)<br>
    <div><br>
in case of machine"A" as controller and as 2 ipengines<br>
pull FOO from machine"A" 2 engines 3.4   seconds        (2*500kB/3.4
=&gt;<br>
294kB/s) on a local machine<br>
pull FOO from machine"A" 1 engine 2.7     seconds        (500kB/2.7
=&gt;<br>
185kB/s)<br>
    <br>
    </div>
I guess I'm doing something wrong, or I missuse something. Any hint<br>
would be appreciate, anyway I will continue to dig in.<br>
    <br>
Machine"A" and "B" are running under RHEL5 flavoured distro, with python<br>
2.6, ipython 0.11 installed from source.<br>
Machine"A" is a Quad core 2.6GHz<br>
Machine"B" is an AMD64 3000+  1.8GHz (pretty old but still alive)<br>
    <br>
cheers.<br>
            Joe<br>
    <font color="#888888"><br>
    <br>
    <br>
--<br>
RICHARD Georges-Emmanuel<br>
CEO - Electronic and Computer Engineer<br>
    <a moz-do-not-send="true"
 href="mailto:perspective.electronic@gmail.com" target="_blank">perspective.electronic@gmail.com</a><br>
遠大電子有限公司 (統一編號24470425)<br>
手機 <a moz-do-not-send="true" href="tel:%2B886930319433"
 value="+886930319433" target="_blank">+886930319433</a><br>
電話 <a moz-do-not-send="true" href="tel:%2B88635735463"
 value="+88635735463" target="_blank">+88635735463</a><br>
    </font>
    <div>
    <div><br>
_______________________________________________<br>
IPython-User mailing list<br>
    <a moz-do-not-send="true" href="mailto:IPython-User@scipy.org"
 target="_blank">IPython-User@scipy.org</a><br>
    <a moz-do-not-send="true"
 href="http://mail.scipy.org/mailman/listinfo/ipython-user"
 target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
    </div>
    </div>
  </blockquote>
  </div>
  <br>
  </div>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">-- 
RICHARD Georges-Emmanuel
CEO - Electronic and Computer Engineer
<a class="moz-txt-link-abbreviated" href="mailto:perspective.electronic@gmail.com">perspective.electronic@gmail.com</a>
遠大電子有限公司 (統一編號24470425)
手機 +886930319433
電話 +88635735463</pre>
</body>
</html>