{"action":"created","issue":{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/31","repository_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic","labels_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/31/labels{/name}","comments_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/31/comments","events_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/31/events","html_url":"https://github.com/mpiforumbot/mpi-forum-historic/issues/31","id":167211130,"number":31,"title":"Add MPI_IN_PLACE option to Alltoall","user":{"login":"mpiforumbot","id":20617676,"avatar_url":"https://avatars.githubusercontent.com/u/20617676?v=3","gravatar_id":"","url":"https://api.github.com/users/mpiforumbot","html_url":"https://github.com/mpiforumbot","followers_url":"https://api.github.com/users/mpiforumbot/followers","following_url":"https://api.github.com/users/mpiforumbot/following{/other_user}","gists_url":"https://api.github.com/users/mpiforumbot/gists{/gist_id}","starred_url":"https://api.github.com/users/mpiforumbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpiforumbot/subscriptions","organizations_url":"https://api.github.com/users/mpiforumbot/orgs","repos_url":"https://api.github.com/users/mpiforumbot/repos","events_url":"https://api.github.com/users/mpiforumbot/events{/privacy}","received_events_url":"https://api.github.com/users/mpiforumbot/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/labels/Enhancements%20to%20standard","name":"Enhancements to standard","color":"fbca04"},{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/labels/Forum%20feedback%20requested","name":"Forum feedback requested","color":"f9d0c4"},{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/labels/MPI%202%5C.2","name":"MPI 2\\.2","color":"ededed"},{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/labels/Text%20committed","name":"Text committed","color":"d93f0b"}],"state":"open","locked":false,"assignee":{"login":"mpiforumbot","id":20617676,"avatar_url":"https://avatars.githubusercontent.com/u/20617676?v=3","gravatar_id":"","url":"https://api.github.com/users/mpiforumbot","html_url":"https://github.com/mpiforumbot","followers_url":"https://api.github.com/users/mpiforumbot/followers","following_url":"https://api.github.com/users/mpiforumbot/following{/other_user}","gists_url":"https://api.github.com/users/mpiforumbot/gists{/gist_id}","starred_url":"https://api.github.com/users/mpiforumbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpiforumbot/subscriptions","organizations_url":"https://api.github.com/users/mpiforumbot/orgs","repos_url":"https://api.github.com/users/mpiforumbot/repos","events_url":"https://api.github.com/users/mpiforumbot/events{/privacy}","received_events_url":"https://api.github.com/users/mpiforumbot/received_events","type":"User","site_admin":false},"assignees":[{"login":"mpiforumbot","id":20617676,"avatar_url":"https://avatars.githubusercontent.com/u/20617676?v=3","gravatar_id":"","url":"https://api.github.com/users/mpiforumbot","html_url":"https://github.com/mpiforumbot","followers_url":"https://api.github.com/users/mpiforumbot/followers","following_url":"https://api.github.com/users/mpiforumbot/following{/other_user}","gists_url":"https://api.github.com/users/mpiforumbot/gists{/gist_id}","starred_url":"https://api.github.com/users/mpiforumbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpiforumbot/subscriptions","organizations_url":"https://api.github.com/users/mpiforumbot/orgs","repos_url":"https://api.github.com/users/mpiforumbot/repos","events_url":"https://api.github.com/users/mpiforumbot/events{/privacy}","received_events_url":"https://api.github.com/users/mpiforumbot/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/milestones/3","html_url":"https://github.com/mpiforumbot/mpi-forum-historic/milestones/2008/12/15%20Menlo%20Park","labels_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/milestones/3/labels","id":1900464,"number":3,"title":"2008/12/15 Menlo Park","description":"","creator":{"login":"mpiforumbot","id":20617676,"avatar_url":"https://avatars.githubusercontent.com/u/20617676?v=3","gravatar_id":"","url":"https://api.github.com/users/mpiforumbot","html_url":"https://github.com/mpiforumbot","followers_url":"https://api.github.com/users/mpiforumbot/followers","following_url":"https://api.github.com/users/mpiforumbot/following{/other_user}","gists_url":"https://api.github.com/users/mpiforumbot/gists{/gist_id}","starred_url":"https://api.github.com/users/mpiforumbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpiforumbot/subscriptions","organizations_url":"https://api.github.com/users/mpiforumbot/orgs","repos_url":"https://api.github.com/users/mpiforumbot/repos","events_url":"https://api.github.com/users/mpiforumbot/events{/privacy}","received_events_url":"https://api.github.com/users/mpiforumbot/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":3,"state":"closed","created_at":"2016-07-23T22:09:06Z","updated_at":"2016-07-24T00:58:48Z","due_on":"2008-12-17T05:00:00Z","closed_at":"2016-07-23T22:09:06Z"},"comments":22,"created_at":"2016-07-24T00:58:42Z","updated_at":"2016-07-24T00:59:06Z","closed_at":null,"body":"**Originally by _traff_ on 2008-10-10 08:22:19 -0500**\n\n___\n# Add MPI_IN_PLACE option to AlltoallAuthor: Torsten Hoefler\n\nUpdate: Jesper Larsson Träff, Torsten Hoefler\n\n## Status\n Sep 8 2008 Straw Vote\n\nFor the idea of using IN_PLACE:\n\n|| Yes || Maybe || No for 2.2 || Abstain ||\n|| 24  || 0     ||  0         ||    1    ||\n\nFor the idea of adding new routines:\n\n|| Yes || Maybe || No for 2.2 || Abstain ||\n|| 5 || 25 || 0 || 2 ||\n\n## Description\n\nAllow `MPI_IN_PLACE` to `MPI_Alltoall` as a send (or receive) buffer argument, with the intention that data to be sent and received are taken from the same buffer. Thus, the effect of the *in-place* option in this case will be that data in the buffer are replaced. The call can be seen as an analogue of `MPI_Sendrecv_replace`.\n\nSince sendbuffers may likely be typed `const`, the proposal is that `MPI_IN_PLACE` can be specified as the `sendbuf` argument. In that case, the data to be sent must be placed in the receive buffer. Upon completion of the operation, they will have been replaced with the data from all other processes (in the usual rank order).\n\nIt could make sense for algorithms to know that **all** processes are in *replace*-mode, that is to require that if some process calls with `MPI_IN_PLACE`, then **all** must do so!\n\nThe idea could be extended to `MPI_Alltoallv`, although the requirements on the `count` vectors may be difficult for users\nto deal with. Nevertheless, `MPI_IN_PLACE` makes perfect\nsense here also, and a proposal is made below.\n\nSee also Ticket #113\n\n## History\n\nSeveral users (>2) asked me for it. It makes sense in memory constrained situations.\n\nShould check the somewhat more involved/constrained operation discussed in Siegel's MADRE paper, EuroPVM/MPI 2008.\n\n## Proposed Solution\n\n### Part A\n\nReplace p. 155, line 46 by the following text:\n\nThe \"in place\" option for intracommunicators is specified by passing `MPI_IN_PLACE` to the argument `sendbuf` at *all* processes. In such a case `sendcount` and `sendtype` arguments are ignored. The data to be sent is taken from the `recvbuf` and replaced by the received data. Data sent and received must have the same type map as specified by `recvcount` and `recvtype`.\n\n-Rationale*:\n\nFor large `MPI_Alltoall` instances, allocating both send and receive buffers may consume too much memory. The \"in place\" option effectively halves the memory consumption and is useful in situations where the data to be sent will not be used by the sending process after the `MPI_Alltoall` exchange (e.g., in parallel Fast Fourier Transforms).\n\n-Advice to Implementors*:\nUsers may opt to use the \"in place\" option in order to conserve memory. Quality MPI implementations should thus strive to minimize system buffering.\n\n### Part B\n\nP. 157, line 20, replace:\n\nNo \"in place\" option is supported.\n\nby\n\nThe \"in place\" option for intracommunicators is specified by passing `MPI_IN_PLACE` to the argument `sendbuf` at *all* processes. In such a case `sendcounts`, `sdispls` and `sendtype` arguments are ignored. The data to be sent is taken from the `recvbuf` and replaced by the received data. Data sent and received must have the same type map as specified by the `recvcounts` array and the `recvtype`, and are taken from the locations\nof the receive buffer specified by `rdispls`.\n\n-Advice to Users*:\n\nSpecifying the \"in place\" option (which must be given on all processes) implies that the same amount and type of data is sent and received between any two processes in the group of the communicator.\nDifferent pairs of processes can exchange different amounts of data.\nUsers must ensure that `recvcounts[j]` and\n`recvtype` on process `i` match `recvcounts[i]` and\n`recvtype` on process `j`. This symmetric exchange is useful in some applications where the data to be sent will not be used by the sending process after the `MPI_Alltoallv` exchange.\n\nReplace p. 159, line 17 with:\n\nThe \"in place\" option for intracommunicators is specified by passing `MPI_IN_PLACE` to the argument `sendbuf` at *all* processes. In such a case `sendcounts`, `sdispls` and `sendtypes` arguments are ignored. The data to be sent is taken from the `recvbuf` and replaced by the received data. Data sent and received must have the same type map as specified by the `recvcounts` and `recvtypes` arrays, and are taken from the locations\nof the receive buffer specified by `rdispls`.\n\n## Impact on Implementations\n\nAn implementation in terms of `MPI_Sendrecv_replace()` can trivially be done. Better solutions exist (of course), so efficient `MPI_Alltoall` implementations need to be changed. \n\n## Impact on Applications / Users\n\nFor `MPI_IN_PLACE` there is none, it is an addition (that some \nscenarios may benefit from). \n\n## Alternative Solutions\n\nAn alternative would be to have (in analogy with `MPI_Sendrecv_replace` a dedicated collective\n\n```\n#!c\nMPI_Alltoall_replace(sendrecvbuf,...)\n```\n\nDeprecate MPI_Sendrecv_replace() and add the MPI_IN_PLACE option to MPI_Sendrecv() so that the symmetry in the standard is retained. But the Forum was widely opposed to this proposal (as it would require an additional branch in the performance-critical MPI_Sendrecv()).\n\nhtor: I don't think that we need the rationale below because this is already enforced for other All-operations, such as Allreduce and Allgather. {Ex}Scan is an exception here, see #94!\n\nRationale: \"In order to stay symmetric, we propose to deprecate MPI_Sendrecv_replace() and add the MPI_IN_PLACE option to MPI_Sendrecv().\"\n\n## Entry for the Change Log\n\nFor Part A:\n\nSection 5.8 on page 155.\n\"In place\" option is added to MPI_ALLTOALL, MPI_ALLTOALLV, and MPI_ALLTOALLW for intracommunicators."},"comment":{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/comments/234750093","html_url":"https://github.com/mpiforumbot/mpi-forum-historic/issues/31#issuecomment-234750093","issue_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/31","id":234750093,"user":{"login":"mpiforumbot","id":20617676,"avatar_url":"https://avatars.githubusercontent.com/u/20617676?v=3","gravatar_id":"","url":"https://api.github.com/users/mpiforumbot","html_url":"https://github.com/mpiforumbot","followers_url":"https://api.github.com/users/mpiforumbot/followers","following_url":"https://api.github.com/users/mpiforumbot/following{/other_user}","gists_url":"https://api.github.com/users/mpiforumbot/gists{/gist_id}","starred_url":"https://api.github.com/users/mpiforumbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpiforumbot/subscriptions","organizations_url":"https://api.github.com/users/mpiforumbot/orgs","repos_url":"https://api.github.com/users/mpiforumbot/repos","events_url":"https://api.github.com/users/mpiforumbot/events{/privacy}","received_events_url":"https://api.github.com/users/mpiforumbot/received_events","type":"User","site_admin":false},"created_at":"2016-07-24T00:59:05Z","updated_at":"2016-07-24T00:59:05Z","body":"**Originally by _bronis_ on 2009-02-05 16:33:25 -0600**\n\n___\nAnswer to Rolf:\n\nSee my response to this question in ticket #94. MPI_IN_PLACE is not required everywhere. Noting that here would be fine although perhaps it should be clarified generally."}}
{"actor":{"display_login":"mpiforumbot"}}