<div dir="ltr"><div>Thank you. I do know about the futures mechanism though I didn't know that futures can be implicit. Causal asynchronous execution sounds indeed like implicit future mechanism.</div><div>I will check it out a bit more and I'll reference it accordingly.</div><div><br></div><div>There are similar mechanisms in actor-based languages, but I am proposing to execute</div><div>a compound C++ statement in a non-sequential way, with causal asynchronous execution.</div><div>This would certainly break a lot of code, but I am proposing this as a compiler flag.</div><div>There is a lot of code that can be automatically translated from sequential to causal asynchronous code. There is also a lot of code that can be translated with not too much human programming effort. And then people could write new causal asynchronous code,</div><div>which will be naturally parallel. I show some extensive examples of such code. Would be nice to see if people like such code.<br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Nov 27, 2018 at 12:55 PM Troy Johnson <<a href="mailto:troyj@cray.com">troyj@cray.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div class="m_8341602437801758055WordSection1">
<p class="m_8341602437801758055MsoListParagraph"><u></u><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d"><span>Ø<span style="font:7.0pt "Times New Roman""> 
</span></span></span><u></u>Could you please provide me with a reference to causal asynchronous execution?<span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><a href="https://en.wikipedia.org/wiki/Futures_and_promises" target="_blank">https://en.wikipedia.org/wiki/Futures_and_promises</a><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">-Troy<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Edward Givelberg <<a href="mailto:ed.givelberg@gmail.com" target="_blank">ed.givelberg@gmail.com</a>>
<br>
<b>Sent:</b> Tuesday, November 27, 2018 11:41 AM<br>
<b>To:</b> Troy Johnson <<a href="mailto:troyj@cray.com" target="_blank">troyj@cray.com</a>><br>
<b>Cc:</b> <a href="mailto:jeff.science@gmail.com" target="_blank">jeff.science@gmail.com</a>; <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<b>Subject:</b> Re: [cfe-dev] parallel C++<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Troy,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">"Multi-core CPUs are a dead end" is not a sensationalist statement. Multi-core CUs are limited to about a dozen cores. Nobody knows how to program CPUs with 1000 cores.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Some "religious" people may actually like to program with threads, but there are at least 20 million programmers who use OO programming. How many of them enjoy threads or MPI?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Not to mention PGAS....<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">About remote pointers: my question is specifically why can't we write<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Object * some_object = new Object(a, b, c, d);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">in C++ where some_object is not an ordinary pointer, but a remote pointer?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">It is possible to implement this without breaking existing code.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Could you please provide me with a reference to causal asynchronous execution?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I think you may very well be right about it, but I searched and I did not find anything like this.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">It seems to me logical that someone thought about it before me, but I'd like to see and read the work.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, Nov 27, 2018 at 12:17 PM Troy Johnson <<a href="mailto:troyj@cray.com" target="_blank">troyj@cray.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="m_8341602437801758055m7664825788048639943msolistparagraph"><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d">Ø</span><span style="font-size:7.0pt;color:#1f497d"> 
</span>Multi-core CPUs and all the associated software technologies (shared memory, threads, etc) are a technological dead end.<u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Wow.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="m_8341602437801758055m7664825788048639943msolistparagraph"><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d">Ø</span><span style="font-size:7.0pt;color:#1f497d"> 
</span>I propose to introduce remote pointers into C++. I am very surprised nobody thought of this before.<u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">They have and this is why Jeff pointed you to a variety of related work that is not cited in the paper. 
 Just as one example, UPC has the concept of a pointer to shared data that may exist with another thread on another node.  Two recent attempts at a PGAS model for C++ (UPC++ and Coarray C++) have similar concepts.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="m_8341602437801758055m7664825788048639943msolistparagraph"><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d">Ø</span><span style="font-size:7.0pt;color:#1f497d"> 
</span>I am also proposing a new way of executing code, which I call causal asynchronous execution.<u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Again, that’s also not new.  There are a lot of existing concepts in your paper, which isn’t by itself
 bad – perhaps you are combining them all together in some nice new way – but please don’t represent the component ideas as brand new.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="m_8341602437801758055m7664825788048639943msolistparagraph"><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d">Ø</span><span style="font-size:7.0pt;color:#1f497d"> 
</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black">The object-oriented computing framework provides the foundation for a new computer architecture, which we call a multiprocessor computer.</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">
 [From the linked paper]</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">That really *<b>really</b>* needs a new name. 
</span><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d">J</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">-Troy</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> cfe-dev <<a href="mailto:cfe-dev-bounces@lists.llvm.org" target="_blank">cfe-dev-bounces@lists.llvm.org</a>>
<b>On Behalf Of </b>Edward Givelberg via cfe-dev<br>
<b>Sent:</b> Tuesday, November 27, 2018 10:14 AM<br>
<b>To:</b> <a href="mailto:jeff.science@gmail.com" target="_blank">jeff.science@gmail.com</a><br>
<b>Cc:</b> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<b>Subject:</b> Re: [cfe-dev] parallel C++</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">Jeff,<u></u><u></u></p>
<div>
<p class="MsoNormal">Multi-core CPUs and all the associated software technologies (shared memory, threads, etc) are a technological dead end.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I argue more than that: all software technologies that use processes<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">are dead on arrival. This includes the technologies you mention in<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">your presentation<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://www.ixpug.org/images/docs/KAUST_Workshop_2018/IXPUG_Invited2_Hammond.pdf" target="_blank">https://www.ixpug.org/images/docs/KAUST_Workshop_2018/IXPUG_Invited2_Hammond.pdf</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">People got used to processes over decades, so when they talk about parallelism they immediately talk about processes, but this is the root of the problem. I propose object-level
 parallelism. An object is more than a process. It is a virtual machine.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I propose to introduce remote pointers into C++. I am very surprised nobody thought of this before. I'd be curious to know how much work<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">people think this would be to do it in LLVM. I know it may be possible to introduce something like remote_ptr, but I don't think it is a good idea.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I am also proposing a new way of executing code, which I call causal asynchronous execution. I'd like to know if people find it natural to write code like this.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Nov 26, 2018 at 10:26 PM Jeff Hammond <<a href="mailto:jeff.science@gmail.com" target="_blank">jeff.science@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">I’ll probably have more detailed comments later but the related work you may wish to consider includes:<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal">- UPC and Berkeley UPC++<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- Charm++<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- HPX from LSU<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- DASH (<a href="http://www.dash-project.org/" target="_blank">http://www.dash-project.org/</a>)<u></u><u></u></p>
<div>
<p class="MsoNormal">- MADNESS (<a href="https://arxiv.org/abs/1507.01888" target="_blank">https://arxiv.org/abs/1507.01888</a>)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">There are quite a few dead parallel C++ dialects from the last millennium but it’s probably not worth your time to find and read about them.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I’m very glad that you used MPI as your communication runtime. This will save you lots of pain.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Jeff<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Nov 26, 2018 at 2:57 PM Edward Givelberg via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<div>
<div>
<p class="MsoNormal"><br>
Chris Lattner suggested that I post to this mailing list.<br>
<br>
I used Clang/LLVM to build a prototype for parallel<br>
interpretation of C++. It's based on the idea that C++ <br>
objects can be constructed remotely, and accessed via <br>
remote pointers, without changing the C++ syntax.<br>
I am a mathematician, not an expert on compilers.<br>
I am proposing changes to the C++ standard and to the<br>
compiler architecture, so I'm very interested to hear from<br>
experts.<br>
My paper is<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://arxiv.org/abs/1811.09303" target="_blank">https://arxiv.org/abs/1811.09303</a><br>
Best regards,<br>
Ed<br>
<br>
-----------------------------------------------------------------<br>
A solution to the problem of parallel programming <br>
E. Givelberg<br>
<br>
The problem of parallel programming is the most important<br>
open problem of computer engineering.<br>
We show that object-oriented languages, such as C++,<br>
can be interpreted as parallel programming languages,<br>
and standard sequential programs can be parallelized automatically.<br>
Parallel C++ code is typically more than ten times shorter than<br>
the equivalent C++ code with MPI.<br>
The large reduction in the number of lines of code in parallel C++<br>
is primarily due to the fact that communications instructions,<br>
including packing and unpacking of messages, are automatically <br>
generated in the implementation of object operations.  <br>
We believe that implementation and standardization of parallel <br>
object-oriented languages will drastically reduce the cost of <br>
parallel programming.<br>
his work provides the foundation for building a new computer <br>
architecture, the multiprocessor computer, including <br>
an object-oriented operating system and more energy-efficient, <br>
and easily programmable, parallel hardware architecture.<br>
The key software component of this architecture is a compiler<br>
for object-oriented languages.  We describe a novel compiler<br>
architecture with a dedicated back end for the interconnect fabric,<br>
making the network a part of a multiprocessor computer,<br>
rather than a collection of pipes between processor nodes.<br>
Such a compiler exposes the network hardware features <br>
to the application, analyzes its network utilization, optimizes the<br>
application as a whole, and generates the code for the<br>
interconnect fabric and for the processors.<br>
Since the information technology sector's electric power consumption<br>
is very high, and rising rapidly, implementation and widespread <br>
adoption of multiprocessor computer architecture<br>
will significantly reduce the world's energy consumption.<u></u><u></u></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><u></u><u></u></p>
</blockquote>
</div>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<p class="MsoNormal">Jeff Hammond<br>
<a href="mailto:jeff.science@gmail.com" target="_blank">jeff.science@gmail.com</a><br>
<a href="http://jeffhammond.github.io/" target="_blank">http://jeffhammond.github.io/</a><u></u><u></u></p>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>

</blockquote></div>