Hello all,

I'm Antony, a new recruit to the MPIR development team and am announcing
my intention to (try to) bring parallel processing to MPIR. I'd love to
say I'll be leading the effort but its more the case that I'll be
staggering in the right direction (or maybe just any direction) and
accepting lots of help along the way. I don't know of any other efforts
to systematically parallelise MPIR so that's why I'm starting this one.
If anyone is, please shout! I'll join in!!

(Some people have previously mentioned wanting to help with this - if
you do, get in touch. If you have code, even better).

My Background: I had a bit of a sharp introduction to "parallel
processing" - my first major software project was a realish time gui app
to read from several devices simultaneously, so I got very familiar with
the CreateThread() function and thread synchronisation - semaphores and
WIN32's auto-resetting events etc. I've done a fair bit more coding
since then, however, including Linux's equivalents (fork, pthreads etc).
I discovered OpenMP and CUDA a while ago and have been experimenting
with both. I came across MPIR, discussed my experiences with Bill and
here I am.

So, without further ado, a FAQ-style introduction (even though nobody's
asked any questions yet)

** What's the plan? **

Plan?

The plan is to start out simple and build up. This means starting with
OpenMP because it's supported on Windows and Linux (VC9/GCC 4.4) and it
is as simple as adding:  #pragma omp parallel for ... to the line above
the for loops that do SIMD-like operations. Thus, it is possible
(theoretically) to speed some things up with very little effort.

The next step will be to test what difference this makes on these
functions compared to their single threaded counterparts. If there's a
significant speedup, good, if not, why not. Can we get any more speed
out? Do we need to optimise more carefully?

Then it's a case of going to the more difficult algorithms and starting
to branch out into other architectures such as CUDA, MPI etc. It's hard
to say where we're going as it'll really depend on results / things we
try along the way, feedback we get etc. I envisage this as a bit of
science, really.

** What about CUDA/Stream/Microsoft's GPGPU thing? **

Well, I don't personally own a system with an ATI card in it, so of all
of them I'll be starting with CUDA because it is the most mature of all
three systems as far as I'm aware. I'll keep a weather eye on the rest
of the technologies, however, as where possible if they converge to a
common standard we want to leverage it (unless it's slow!).

** How will this affect the library? **

Over time, I expect the codebase will change slightly to reflect a)
parallelisation coming in and b) gpu support as well as cpu support, if
gpgpu really takes off.

That said, I will be developing this on a branch outside of the main
trunk for the moment, so in the meantime this development will be
separate to the main MPIR.

And finally, hopefully it'll go faster!!

** When will this be available? **

No idea. I'm not being paid to do this; it's a free-time contribution in
the evenings and at weekends. But, if you help out, it'll go faster!

** Development: I want to try your code / I want to contribute **

Ok now to the really fun bit.

I shall soon be posting my contributions every week or other week to the
mpir svn server, so if you want my "slow" updates, that's the best place
to go.

If you want the bleeding edge: I'm managing my mpir work using git
(importing from svn). You can access my git repository by:

git clone git://vennard.org.uk/mpir.git
or, if behind firewall etc:
git clone http://vennard.org.uk/git/mpir.git

If you want to contribute, by all means clone away and start coding.
When you've got something you want to put in you have a few options:

1) Set up your own repository somewhere.
2) Host a tarball somewhere/email it to me.
3) Send out a patch file.

1) via git is of course easiest for me but I'll try to merge from any
source, permitting of course. I won't by default allow people commit
access to my repository but if you end up contributing regularly, I will
be more than happy to give you commit access, I'll just need a SSH
public key (MPIR team, if you want access, send me a SSH public key).

Basically, if you want to contribute, get stuck in.

Warning: to start off with the code won't conform to the coding style,
probably break a lot, maybe not even compile. That's development.

That's pretty much it I think. I shall be watching mpir-devel and this
is my e-mail, so get in touch. If anyone disagrees/has a better idea/has
any questions, points to make etc, fire away, I'm listening!

Thanks,

Antony Vennard

Building an eMPIRe, #pragma omp parallel {one bignum at a time};

-- 
You received this message because you are subscribed to the Google Groups 
"mpir-devel" group.
To post to this group, send email to mpir-de...@googlegroups.com.
To unsubscribe from this group, send email to 
mpir-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/mpir-devel?hl=en.

Reply via email to