{"action":"created","issue":{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/34","repository_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic","labels_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/34/labels{/name}","comments_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/34/comments","events_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/34/events","html_url":"https://github.com/mpiforumbot/mpi-forum-historic/issues/34","id":167212633,"number":34,"title":"Extend predefined MPI_Op's to user defined datatypes composed of a single, predefined type","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%20%3Cnext%3E","name":"MPI <next>","color":"d4c5f9"}],"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/6","html_url":"https://github.com/mpiforumbot/mpi-forum-historic/milestones/2009/04/06%20Chicago","labels_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/milestones/6/labels","id":1900467,"number":6,"title":"2009/04/06 Chicago","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":1,"closed_issues":3,"state":"closed","created_at":"2016-07-23T22:09:07Z","updated_at":"2016-07-24T01:58:45Z","due_on":"2009-04-08T04:00:00Z","closed_at":"2016-07-23T22:09:07Z"},"comments":7,"created_at":"2016-07-24T01:58:37Z","updated_at":"2016-07-24T01:58:48Z","closed_at":null,"body":"**Originally by _traff_ on 2008-10-10 08:33:35 -0500**\n\n___\nAuthor: George Bosilca\n\n## Description\nCurrently the predefined `MPI_Op` are limited to the predefined MPI types. This proposal try to extend their usage to user derived datatypes, constructed from the same predefined datatype. Such datatypes can be created with any `MPI_Type` function, and might or not contain gaps.\n\nThe intent is to allow the MPI library to apply internal optimizations (such as pipelining) on user derived types, leading to a large performance improvement for some classes of parallel applications. Basically, all mathematical algorithms using trapezoidal matrices fall under this category.\n\nThis change has to be integrated with the \"New predefined datatypes\" from ticket #18.\n\n## History\nSeveral users have complained about this on the past. Example where such an extension would be beneficial include most of the math algorithms working on trapezoidal matrices. Global communications with predefined operations cannot be applied on such datatypes because of their *non predefined* characteristic. A user defined `MPI_Op` can be used instead of a predefined `MPI_Op` having the same mathematical signification. While this is the current solution most of the users rely on, it induces from the MPI implementors perspective a limitation to the usage of highly optimized collective algorithms. As an example, it is difficult to implement a pipelined reduction algorithm with such datatypes, because the requirement of the `MPI_Op` to work only on a complete number of elements of the corresponding type.\n\n## Proposed Solution\nExtend the `MPI_Op` in order to allow the global reductions to use the same flexible definition of `MPI_Op` as the `MPI_Accumulate`.\n\nIn the chapter \"Collective Communication\" a compulsory dependency between predefined datatypes and the `MPI_Op` is defined. The section defining this dependency start at page 162 at line 8:\n  For the other predeﬁned operations, we enumerate below the allowed combinations of op and datatype arguments.\nand then later on the same page line 27:\n  Now, the valid datatypes for each option is speciﬁed below.\n  || Op Allowed || Types ||\n  || MPI_MAX, MPI_MIN || C integer, Fortran integer, Floating point ||\n  || MPI_SUM, MPI_PROD || C integer, Fortran integer, Floating point, Complex ||\n  || MPI_LAND, MPI_LOR, MPI_LXOR || C integer, Logical ||\n  || MPI_BAND, MPI_BOR, MPI_BXOR || C integer, Fortran integer, Byte ||\n\nHowever, of the discussion about the `MPI_Op` from the *One-sided Communications* chapter (page 332 line 9) this strong binding is relaxed:\n  Each datatype argument must be a predeﬁned datatype or a derived datatype, where all basic components are of the same predeﬁned datatype. Both datatype arguments must be constructed from the same predeﬁned datatype.\n\nThe proposed solution is to replace the following paragraph on page 161 lines 9-11 \n  Predeﬁned operators work only with the MPI types listed in Section 5.9.2 and Section 5.9.4\nwith\n  These operations can be applied on a predefined datatype or a derived datatype, where all basic components are of the same predefined datatype. In other words these operations can be applied on any datatype having a type signature containing only one single predefined datatype, if this predefined datatype match the operation as defined in Section 5.9.2 and Section 5.9.4.\n\nThen on page 162 lines 27, I propose to change from\n  Now, the valid datatypes for each option is speciﬁed below.\nto\n  Now, the valid predefined datatypes for each option is speciﬁed below.\n\n## Impact on Implementations\nImplementations need to modify the behavior of their global reduction functions. As most of the collective algorithms pack the data upfront (and unpack it at the end) and work on temporary buffers the change should be minimal. In an implementation of a global reduction based on point-to-point messages, a pack operation might be necessary in the case the derived datatype is not contiguous before the first operation is computed.\n\nAs an example, in the context of Open MPI, the changes corresponding to this extension, have been implemented for the all 7 algorithms for the `MPI_Reduce` collective in about 4 hours, including the testing time.\n\n## Impact on Applications / Users\nThis will make some code simpler as the users will not have to define their own `MPI_Op` if the expected mathematical operation belongs to the MPI predefined operations and the datatype on which the operation is supposed to be applied is composed only by identical types of predefined operations. Additionally, this extension will allow such codes to run faster, as the MPI implementation can use optimized algorithms not only for the operations themselves but for the global communications where they apply.\n\n## Alternative Solutions\nLeave the standard as it is, and keep the burden of creating `MPI_Op` for user derived datatype created from the same predefined datatype on the users.\n\n## Entry for the Change Log\nAllow global reductions with predefined operations on user derived datatypes having a type signature composed by a single predefined datatype.\n\n```\n#!comment\nvim: set ft=wiki tw=0 spell :\n```\n"},"comment":{"url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/comments/234752000","html_url":"https://github.com/mpiforumbot/mpi-forum-historic/issues/34#issuecomment-234752000","issue_url":"https://api.github.com/repos/mpiforumbot/mpi-forum-historic/issues/34","id":234752000,"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-24T01:58:48Z","updated_at":"2016-07-24T01:58:48Z","body":"**Originally by _herault_ on 2009-04-08 11:04:56 -0500**\n\n___\nAgree with new formulation. Ok for first reading.\n\nThe text should probably specify what the count argument means when passing in derived datatypes.\n\n"}}
{"actor":{"display_login":"mpiforumbot"}}