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.