{"id":263,"date":"2009-07-30T01:00:55","date_gmt":"2009-07-30T00:00:55","guid":{"rendered":"http:\/\/www.unixer.de\/blog\/?p=263"},"modified":"2009-07-31T15:31:43","modified_gmt":"2009-07-31T14:31:43","slug":"the-mpi-standard-mpi-22-is-fixed-now","status":"publish","type":"post","link":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/2009\/07\/30\/the-mpi-standard-mpi-22-is-fixed-now\/","title":{"rendered":"The MPI Standard MPI-2.2 is fixed now"},"content":{"rendered":"<p>We just finished all voting on the last MPI-2.2 tickets! This means that MPI-2.2 is fixed now, no changes are possible. The remaining work is simply to merge the accepted tickets into the final draft that will be voted on next time in Helsinki. I just finished editing my parts of the standard draft. Everything (substantial) that I proposed made it in with a reasonable quorum. The new graph topology interface was nicely accepted this time (I think I explained it better and I presented an optimized implementation). However, other tickets didn&#8217;t go that smooth. The process seems very interesting from a social perspective (the way we vote has a substantial impact on the results etc.).<\/p>\n<p>Some tickets that I think are worth discussing are:<\/p>\n<p><strong><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/24\">Add a local Reduction Function<\/a> <\/strong>&#8211; this enables the user to use MPI reduction operations locally (without communication). This is very useful for library implementors (e.g., implementing new collective routines on top of MPI) &#8211; <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/27\"><br \/>\n<\/a><strong><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/27\">Regular (non-vector) version of MPI_Reduce_scatter<\/a> <\/strong>&#8211; this addresses a kind of missing functionality. The current Reduce_scatter should be Reduce_scatterv &#8230; but it isn&#8217;t. Anyway, if you ever asked yourself why the heck should I use Reduce_scatter then think about parallel matrix multiplication! An example is attached to the ticket. &#8211; <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/31\"><strong>Add MPI_IN_PLACE option to Alltoall<\/strong><\/a> &#8211; nobody knows why this is not in MPI-2. I suppose that it seemed complicated to implement (an optimized implementation is indeed NP hard), but we have a simple (non-optimal, linear time) algorithm to do it. It&#8217;s attached to the ticket :). &#8211; <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/33\"><br \/>\n<strong>Fix Scalability Issues in Graph Topology Interface<\/strong><\/a> &#8211; this is in my opinion the most interesting\/important addition in MPI-2.2. The graph topology interface in MPI-2.1 is horribly broken in that every process needs to provide the *full* graph to the library (which even in sparse graphs leads to $\\Omega(P)$ memory *per node*). I think we have an elegant fix that enables fully distributed specification of the graph as well as each node specifies its neighbors. This will be even more interesting in MPI-3, when we start to use the topology as communication context. &#8211; <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/66\"><strong>Extending MPI_COMM_CREATE to create several disjoint sub-communicators from an intracommunicator<\/strong><\/a> -Neat feature that allows you to create multiple communicators with a single call! &#8211; <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/94\"><strong>Add MPI_IN_PLACE option to Exscan<\/strong><\/a> &#8211; again, don&#8217;t know why this is missing in MPI-2.0. The rationale that is given is not convincing. <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/117\"><strong>Define a new MPI_Count Datatype<\/strong><\/a> &#8211; MPI-2.1 can&#8217;t send more than 2^31 (=2 Mio) objects on 32-bit systems right now &#8211; we should fix that! However, we had to move this to MPI-3 due to several issues that came up during the implementation (most likely ABI issues) <strong>POSTPONED<\/strong>! It feels really good to have this strict implementation requirement! We will certainly have this important fix in MPI-3!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/140\"><strong>Add const Keyword to the C bindings<\/strong><\/a> &#8211; most discussed feature I guess \ud83d\ude42 &#8211; I am not sure about the consequences yet, but it seems nice to me (so far). &#8211; <strong>POSTPONED<\/strong>! We moved this to MPI-3 because some part of the Forum wasn&#8217;t sure about the consequences. I am personally also going back and forth, the issue with strided datatypes seems really worrysome. <\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/45\"><strong>Allow concurrent access to send buffer<\/strong><\/a> &#8211; most programmers probably did not know that this is illegal, but it certainly is in MPI<=2.0. For example:\n\nint sendbuf;\n\nMPI_Request req[2];\nMPI_Isend(&#038;sendbuf, 1, MPI_INT, 1, 1, MPI_COMM_WORLD, &#038;req[0]);\n\nMPI_Isend(&#038;sendbuf, 1, MPI_INT, 2, 1, MPI_COMM_WORLD, &#038;req[1]);\nMPI_Waitall(2, &#038;req);\n\nis not valid! Two threads are also not allowed to concurrently send the same buffer. This proposal will allow such access. - <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/143\"><strong>MPI_Request_free bad advice to users<\/strong><\/a> &#8211; I personally think that MPI_Request_free is dangerous (especially in the context of threads) and does not provide much to the user. But we can&#8217;t get rid of it. &#8230; so let&#8217;s discourage users to use it! &#8211; <strong>PASSED<\/strong>!<\/p>\n<p><a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/150\"><strong>Deprecate the C++ bindings<\/strong><\/a> &#8211; that&#8217;s funny, isn&#8217;t it? But look at the current C++ bindings, they&#8217;re nothing more then pimped C bindings and only create problems. Real C++ programmers would use Boot.MPI (which internally uses the C bindings ;)), right? &#8211; <strong>PASSED<\/strong> (even though I voted against it ;))<\/p>\n<p>Something odd happened to <a href=\"https:\/\/svn.mpi-forum.org\/trac\/mpi-forum-web\/ticket\/18\">New Predefined Datatypes<\/a>. We found a small typo in the ticket (MPI_C_BOOL  should be 1 instead of 4 bytes). However, it wasn&#8217;t small enough that we could just change it (the process doesn&#8217;t allow significant changes after the first vote). It was now voted in with this bug (I abstained after the heavy discussion though) and it&#8217;s also too late to file a new ticket to fix this bug. However, we will have an errata item that will clarify this. It might sound strange, but I&#8217;m very happy that we stick to our principles and don&#8217;t change anything without proper reviews (these reviews between the meetings where vendors could get user-feedback have influences tickets quite a lot in the past). But still <strong>PASSED<\/strong>!<\/p>\n<p>For all tickets and votes, see <a href=\"http:\/\/meetings.mpi-forum.org\/secretary\/2009\/07\/votes.php\">MPI Forum votes<\/a>!<\/p>\n<p>I&#8217;m very satisfied with the way the Forum works (Bill Gropp is doing a great job with MPI-2.2), I hear about other standardization bodies and have to say that our rules seem very sophisticated. I think MPI-2.2 will be a nice new standard which is not only a bugfix but offers new opportunities to library developers and users (see the tickets above). We are also planning to have a book again (perhaps with an editorial comment addressing the issue in ticket 18 (MPI_C_BOOL)!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We just finished all voting on the last MPI-2.2 tickets! This means that MPI-2.2 is fixed now, no changes are possible. The remaining work is simply to merge the accepted tickets into the final draft that will be voted on &hellip; <a class=\"more-link\" href=\"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/2009\/07\/30\/the-mpi-standard-mpi-22-is-fixed-now\/\">read more<\/a><\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,2],"tags":[],"_links":{"self":[{"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/posts\/263"}],"collection":[{"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=263"}],"version-history":[{"count":10,"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/posts\/263\/revisions"}],"predecessor-version":[{"id":273,"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/posts\/263\/revisions\/273"}],"wp:attachment":[{"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/htor.inf.ethz.ch\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}