<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Christos,<div class=""><br class=""></div><div class="">your idea can certainly go very far, and the capability of extracting and executing one loop nest at a time should enable progress in multiple directions, among them fast performance evaluation of loop transformations and benefits of accelerators. It could also be useful for measuring and tuning off-loading overhead.</div><div class=""><br class=""></div><div class="">Cheers</div><div class="">Gerolf<br class=""><div><blockquote type="cite" class=""><div class="">On Jun 5, 2015, at 3:01 AM, Christos Margiolas <<a href="mailto:chrmargiolas@gmail.com" class="">chrmargiolas@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Gerolf, <div class=""><br class=""></div><div class="">LLVM already has a Utility class for extracting loops to functions. However extracting code to a different module is something that is missing I think. Supporting a homogeneous variant is something I have considered and in fact the debug plugin I have written is a homogeneous variant. I "offload" to the same architecture. The idea could be further extended in a scheme where the offloaded code is loaded in a third process and the main process performs remote process calls. This would probably require extensive data transfers across the address spaces or a Memory Allocator that operates across the processes by using Inter-process shared memory.</div><div class=""><br class=""></div><div class="">--chris</div><div class=""> </div><div class=""><br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Thu, Jun 4, 2015 at 5:57 PM, Gerolf Hoflehner <span dir="ltr" class=""><<a href="mailto:ghoflehner@apple.com" target="_blank" class="">ghoflehner@apple.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">Hi,<div class=""><br class=""></div><div class="">I can see even the homogenous variant of this to be useful. Just having the capability of extracting loops and wrapping them into functions and/or modules could help speeding up performance analysis and experiments. It would also help with testing the basic infrastructure + heterogenous environments.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Cheers</div><div class="">Gerolf</div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class=""><div class="h5"><div class="">On Jun 4, 2015, at 5:35 PM, Christos Margiolas <<a href="mailto:chrmargiolas@gmail.com" target="_blank" class="">chrmargiolas@gmail.com</a>> wrote:</div><br class=""></div></div><div class=""><div class=""><div class="h5"><div dir="ltr" class=""><span style="font-size:12.8000001907349px" class="">Hello All,</span><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class="">The last two months I have been working on the design and implementation of a heterogeneous execution engine for LLVM. I started this project as an intern at the Qualcomm Innovation Center and I believe it can be useful to different people and use cases. I am planning to share more details and a set of patches in the next </div><div style="font-size:12.8000001907349px" class="">days. However, I would first like to see if there is an interest for this. </div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class="">The project is about providing compiler and runtime support for the automatic and transparent offloading of loop or function workloads to accelerators. </div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class=""><span style="font-size:12.8000001907349px" class="">It is composed of the following:</span></div><div style="font-size:12.8000001907349px" class=""><span style="font-size:12.8000001907349px" class="">a) Compiler and Transformation Passes for extracting loops or functions for offloading.</span><br class=""></div><div style="font-size:12.8000001907349px" class="">b) A runtime library that handles scheduling, data sharing and coherency between the</div><div style="font-size:12.8000001907349px" class="">host and accelerator sides.</div><div style="font-size:12.8000001907349px" class="">c) A modular codebase and design. Adaptors specialize the code transformations for the target accelerators. Runtime plugins manage the interaction with the different accelerator environments.</div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class="">So far, this work so far supports the Qualcomm DSP accelerator  but I am planning to extend it to support OpenCL accelerators. I have also developed a debug port where I can test the passes and the runtime without requiring an accelerator.</div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class="">The project is still in early R&D stage and I am looking forward for feedback and to gauge  the interest level. I am willing to continue working on this as an open source project and bring it to the right shape so it can be merged with the LLVM tree. </div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class="">Regards,</div><div style="font-size:12.8000001907349px" class="">Chris</div><div style="font-size:12.8000001907349px" class=""><br class=""></div><div style="font-size:12.8000001907349px" class="">P.S. I intent to join the llvm social in Bay Area tonight and I will be more than happy to talk about it.</div></div></div></div>
_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank" class="">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu/" target="_blank" class="">http://llvm.cs.uiuc.edu</a><br class=""><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br class=""></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>