<html><body><p>Hi<br><br>Reading through the comments: both Chris and Chandler referenced to liboffload, while I thought the subject of conversation was libomptarget and SE.<br>I am being picky about names because liboffload is a library available as part of omp (llvm's openmp runtime library) that, I believe, only targets Intel Xeon Phi.<br><br>Did you mean liboffload or libomptarget?<br><br><br>Thanks<br><br>-- Carlo<br><br><img width="16" height="16" src="cid:1__=8FBBF517DFF00FAE8f9e8a93df938690918c8FB@" border="0" alt="Inactive hide details for Alexandre Eichenberger via Openmp-dev ---03/28/2016 01:44:12 PM---Jason,"><font color="#424282">Alexandre Eichenberger via Openmp-dev ---03/28/2016 01:44:12 PM---Jason,</font><br><br><font size="2" color="#5F5F5F">From: </font><font size="2">Alexandre Eichenberger via Openmp-dev <openmp-dev@lists.llvm.org></font><br><font size="2" color="#5F5F5F">To: </font><font size="2">jhen@google.com</font><br><font size="2" color="#5F5F5F">Cc: </font><font size="2">llvm-dev@lists.llvm.org, cfe-dev@lists.llvm.org, openmp-dev@lists.llvm.org</font><br><font size="2" color="#5F5F5F">Date: </font><font size="2">03/28/2016 01:44 PM</font><br><font size="2" color="#5F5F5F">Subject: </font><font size="2">Re: [Openmp-dev] [cfe-dev] RFC: Proposing an LLVM subproject for parallelism runtime and support libraries</font><br><font size="2" color="#5F5F5F">Sent by: </font><font size="2">"Openmp-dev" <openmp-dev-bounces@lists.llvm.org></font><br><hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br><br><br><font face="Arial">Jason,</font><br><font face="Arial"> </font><br><font face="Arial">I concur with your decision since OMP and StreamExecutor fundamentally differ in how dependences between consecutive tasks are expressed. OMP uses task dependences to express constraint ordering between tasks that execute on the host and/or on a particular device. Obviously, a stream is a DAG but with very specific constraints (one linear ordering per stream), whereas DAG generated by OMP dependences are arbitrary DAGs. This is not a jugement statement, as in many ways stream are much more friendly to GPUs, it is just a decision that the OMP and StreamExecutor "language experts" settled on a different language expressivity/efficiency data point.</font><br><font face="Arial"> </font><br><font face="Arial">I read your blog on the similarities and differences with great interest. I may venture to add another overlooked difference: OMP maps objects with references counts (e.g. first time an object is mapped, its ref count is zero, and the alloc on device and memory copy will occur; further nested map will not generate any alloc and/or communication). In summary, OMP primarily uses a dictionary of mapped variables to manage allocation and data transfer, whereas StreamExecutor it appears to explicitly allocate and move data.</font><br><font face="Arial"> </font><br><font face="Arial">Thanks for your work on this, much appreciated</font><br><font face="Arial"><br>Alexandre<br><br>-----------------------------------------------------------------------------------------------------</font><font color="#0000CD" face="Arial"><br>Alexandre Eichenberger, Master Inventor, Advanced Compiler Technologies<br>- research</font><font face="Arial">: compiler optimization (OpenMP, multithreading, SIMD)</font><font color="#0000CD" face="Arial"><br>- info:</font><font face="Arial"> alexe@us.ibm.com </font><font face="Arial"><a href="http://www.research.ibm.com/people/a/alexe">http://www.research.ibm.com/people/a/alexe</a></font><font color="#0000CD" face="Arial"><br>- phone</font><font face="Arial">: 914-945-1812 (work) 914-312-3618 (cell)</font><br><font face="Arial"> </font><br><font face="Arial"> </font><br><font face="Arial">----- Original message -----<br>From: Jason Henline via Openmp-dev <openmp-dev@lists.llvm.org><br>Sent by: "Openmp-dev" <openmp-dev-bounces@lists.llvm.org><br>To: Andrey Bokhanko <andreybokhanko@gmail.com>, Chandler Carruth <chandlerc@google.com><br>Cc: llvm-dev <llvm-dev@lists.llvm.org>, cfe-dev <cfe-dev@lists.llvm.org>, "openmp-dev@lists.llvm.org" <openmp-dev@lists.llvm.org><br>Subject: Re: [Openmp-dev] [cfe-dev] RFC: Proposing an LLVM subproject for parallelism runtime and support libraries<br>Date: Mon, Mar 28, 2016 12:38 PM<br> </font><br><font face="Arial">I did a more thorough read through liboffload and wrote up a more detailed doc describing how StreamExecutor platforms relate to libomptarget RTL interfaces. The doc also describes why the lack of support for streams in libomptarget makes it impossible to implement some of the most important StreamExecutor platforms in terms of libomptarget (</font><a href="https://github.com/henline/streamexecutordoc/blob/master/se_and_openmp.rst" target="_blank"><u><font color="#0000FF" face="Arial">https://github.com/henline/streamexecutordoc/blob/master/se_and_openmp.rst</font></u></a><font face="Arial">). When I was originally optimistic about using liboffload to implement StreamExecutor platforms, I was not aware of this issue with streams. Thanks to Carlo Bertolli for bringing this to my attention.</font><br><font face="Arial"> </font><br><font face="Arial">After having looked in detail at the liboffload code, it sounds like the best thing to do at this point is to keep StreamExecutor and liboffload separate, but to leave the door open to implement future StreamExecutor platforms in terms of liboffload. From the recent messages on this subject from Carlo and Andrey it seems like there is a general consensus on this, so I would like to move forward with the StreamExecutor project in this spirit.</font><br><font face="Arial"> </font><br><font face="Arial">On Tue, Mar 15, 2016 at 5:09 PM Jason Henline <</font><a href="mailto:jhen@google.com" target="_blank"><u><font color="#0000FF" face="Arial">jhen@google.com</font></u></a><font face="Arial">> wrote:</font><ul><font face="Arial">I created a GitHub repo that contains the documentation I have been creating for StreamExecutor. </font><a href="https://github.com/henline/streamexecutordoc" target="_blank"><u><font color="#0000FF" face="Arial">https://github.com/henline/streamexecutordoc</font></u></a><font face="Arial"> </font><br><font face="Arial"> </font><br><font face="Arial">It contains the design docs from the original email in this thread, and it contains a new doc I just made that gives a more detailed sketch of the StreamExecutor platform plugin interface. This shows which methods must be implemented to support a new platform in StreamExecutor, or to provide a new implementation for an existing platform (e.g. using liboffload to implement the CUDA platform).</font><br><font face="Arial"> </font><br><font face="Arial">I wrote up this doc in response to a lot of good questions I am getting about the details of how StreamExecutor might work with the code OpenMP already has in place.</font><br><font face="Arial"> </font><br><font face="Arial">Best Regards,</font><br><font face="Arial">-Jason</font><br><font face="Arial"> </font><br><font face="Arial">On Tue, Mar 15, 2016 at 12:28 PM Andrey Bokhanko <</font><a href="mailto:andreybokhanko@gmail.com" target="_blank"><u><font color="#0000FF" face="Arial">andreybokhanko@gmail.com</font></u></a><font face="Arial">> wrote:</font><br><font face="Arial">Hola Chandler,</font><br><font face="Arial"> </font><br><font face="Arial">On Tue, Mar 15, 2016 at 1:44 PM, Chandler Carruth via Openmp-dev <</font><a href="mailto:openmp-dev@lists.llvm.org" target="_blank"><u><font color="#0000FF" face="Arial">openmp-dev@lists.llvm.org</font></u></a><font face="Arial">> wrote:</font><ul><font face="Arial">It seems like if the OpenMP folks want to add a liboffload plugin to StreamExecutor, that would be an awesome additional platform, but I don't see why we need to force the coupling here.</font><br><font face="Arial"> </font></ul><font face="Arial"> </font><br><font face="Arial">Let me give you a reason: while user-facing sides of StreamExecutor and OpenMP are quite different (and each warrants its place under the sun!), internal SE's offloading interface and liboffload are doing exactly the same thing. Why we want to duplicate code? As previous replies demonstrated, SE can't serve OpenMP's needs, while liboffload API seems to be general enough to serve SE well (though this has to be verified, of course -- as I understand, Jason is going to do this).</font><br><font face="Arial"> </font><br><font face="Arial">Sure, there is no "must have need" to couple SE and liboffload, but this sounds like a solid software engineering decision to me. Or, quoting Jason, who said this much better than me:</font><br><font face="Arial"> </font><br><font face="Arial">> Although OpenMP and StreamExecutor support different programming models,</font><br><font face="Arial">> some of the work they perform under the hood will likely be very similar.</font><br><font face="Arial">> By sharing code and domain expertise, both projects will be improved and</font><br><font face="Arial">> strengthened as their capabilities are expanded. The StreamExecutor</font><br><font face="Arial">> community looks forward to much collaboration and discussion with OpenMP</font><br><font face="Arial">> about the best places and ways to cooperate.</font><br><font face="Arial"> </font><br><font face="Arial">Espere veure't demà!</font><br><font face="Arial"> </font><br><font face="Arial">Yours,</font><br><font face="Arial">Andrey</font><br><font face="Arial">=====</font><br><font face="Arial">Enginyer de Software</font><br><font face="Arial">Intel Compiler Team</font><br><font face="Arial"> </font></ul><tt>_______________________________________________<br>Openmp-dev mailing list<br>Openmp-dev@lists.llvm.org</tt><tt><u><font color="#0000FF"><br></font></u></tt><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev" target="_blank"><tt><u><font color="#0000FF">http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev</font></u></tt></a><br><font face="Arial"> </font><br><tt>_______________________________________________<br>Openmp-dev mailing list<br>Openmp-dev@lists.llvm.org<br></tt><tt><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev</a></tt><tt><br></tt><br><br><BR>
</body></html>