[pypy-dev] I was talking with Russel Winder at PyCON UK.
Romain Guillebert
romain.py at gmail.com
Thu Sep 29 19:28:13 CEST 2011
Hi
David Beazley noticed that PyPy's GIL isn't very good compared to
CPython's :
https://twitter.com/#!/dabeaz/status/118889721358327808
https://twitter.com/#!/dabeaz/status/118888789136523264
https://twitter.com/#!/dabeaz/status/118864260175634433
IMO it's the same issue
Cheers
Romain
On Thu, Sep 29, 2011 at 07:17:45PM +0200, Laura Creighton wrote:
>
> He says, currently, PyPy's threading does not scale properly. More below. Maybe we
> want to use his benchmark?
>
> Laura
>
>
> ------- Forwarded Message
>
> Return-Path: russel at russel.org.uk
> Delivery-Date: Thu Sep 29 13:53:50 2011
> Subject: PyPy and multiprocessing
> From: Russel Winder <russel at russel.org.uk>
> To: Laura Creighton <lac at openend.se>
>
> - --=-I2STZOatYEgK/vXAGHYd
> Content-Type: text/plain; charset="UTF-8"
> Content-Transfer-Encoding: quoted-printable
>
> Laura,
>
> I have a collection of various versions (using various features of
> various languages) of the embarrassingly parallel problem of calculating
> Pi using quadrature. It is a micro-benchmark and so suffers from all
> the issues they suffer from (especially on the JVM). The code is a
> Bazaar branch http://www.russel.org.uk/Bazaar/Pi_Quadrature.
>
> I am writing as there appears to be an interesting feature using PyPy
> and the microprocessing package in pool mode.
>
> This is a twin-Xeon machine so has 8 cores =E2=80=94 a 32 thread run should=
> only
> go as fast as an 8 thread run. Scaling should be linear in the number
> of cores.
>
> Using CPython 2.7, I get:
>
> |> python2.7 pi_python2_multiprocessing_pool.py
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 3.5378549099
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 1
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 1.97133994102
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 2
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 0.515691041946
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 8
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 0.521239995956
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 32
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> Using PyPy 1.6 I get:
>
> |> pypy pi_python2_multiprocessing_pool.py
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 0.249331951141
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 1
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 0.104065895081
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 2
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 0.0764398574829
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 8
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> =3D=3D=3D=3D Python Multiprocessing Pool pi =3D 3.14159265359
> =3D=3D=3D=3D Python Multiprocessing Pool iteration count =3D 10000000
> =3D=3D=3D=3D Python Multiprocessing Pool elapse =3D 0.124751091003
> =3D=3D=3D=3D Python Multiprocessing Pool process count =3D 32
> =3D=3D=3D=3D Python Multiprocessing Pool processor count =3D 8
>
> There is no statistical significance to these one off numbers but I am
> fairly confident that there are no large variations should a proper
> collection of data be taken.
>
> The point here is that whereas CPython shows the expected scaling, PyPy
> does not give the expected scaling for larger nubmers of cores. Indeed
> having more threads than cores is detrimental to PyPy but not to
> CPython.
>
> Hopefully we will soon be seeing PyPy be Python 3.2 compliant!
>
> - --=20
> Russel.
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D
> Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.winder at ekiga.n=
> et
> 41 Buckmaster Road m: +44 7770 465 077 xmpp: russel at russel.org.uk
> London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
>
> - --=-I2STZOatYEgK/vXAGHYd
> Content-Type: application/pgp-signature; name="signature.asc"
> Content-Description: This is a digitally signed message part
> Content-Transfer-Encoding: 7bit
>
> - -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
>
> iEYEABECAAYFAk6EWpIACgkQr2EGkixYSbrjHQCeJCcoOamtzwY3rPSFofuXACYK
> 7RgAnjuWAuGHI0mSUzQ/BhS/clZbZaUy
> =kVgo
> - -----END PGP SIGNATURE-----
>
> - --=-I2STZOatYEgK/vXAGHYd--
>
> ------- End of Forwarded Message
>
> _______________________________________________
> pypy-dev mailing list
> pypy-dev at python.org
> http://mail.python.org/mailman/listinfo/pypy-dev
More information about the pypy-dev
mailing list