<div dir="ltr"><div>Troy,</div><div><br></div><div>"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.</div><div>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?</div><div>Not to mention PGAS....<br></div><div><br></div><div>About remote pointers: my question is specifically why can't we write</div><div>Object * some_object = new Object(a, b, c, d);</div><div>in C++ where some_object is not an ordinary pointer, but a remote pointer?</div><div>It is possible to implement this without breaking existing code.</div><div><br></div><div>Could you please provide me with a reference to causal asynchronous execution?</div><div>I think you may very well be right about it, but I searched and I did not find anything like this.</div><div>It seems to me logical that someone thought about it before me, but I'd like to see and read the work.<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:17 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_7664825788048639943WordSection1">
<p class="m_7664825788048639943MsoListParagraph"><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>Multi-core CPUs and all the associated software technologies (shared memory, threads, etc) are a technological dead end.<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">Wow.<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="m_7664825788048639943MsoListParagraph"><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>I propose to introduce remote pointers into C++. I am very surprised nobody thought of this before.<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">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.<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="m_7664825788048639943MsoListParagraph"><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>I am also proposing a new way of executing code, which I call 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">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.<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="m_7664825788048639943MsoListParagraph"><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><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]<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">That really *<b>really</b>* needs a new name.
</span><span style="font-size:11.0pt;font-family:Wingdings;color:#1f497d">J</span><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">-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"> 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++<u></u><u></u></span></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-right:0in">
<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-right:0in">
<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>