Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.std.c++ > #692

flow-control operators overloading for "statement templates" aiding a generic solution for parallel technologies a program transformations

From danielgutson@googlemail.com
Newsgroups comp.std.c++
Subject flow-control operators overloading for "statement templates" aiding a generic solution for parallel technologies a program transformations
Date 2013-11-22 09:05 -0600
Organization unknown
Message-ID <9cdab995-effb-4c01-8043-ee4156e6e02e@googlegroups.com> (permalink)

Show all headers | View raw


Technologies such as OpenMP [1], Cilk Plus [2], CUDA [3] and SIMD
vectorization require language extensions (or compiler support).
I am also aware of the work of a project [4] which addresses OpenMP by
incorporating it into the language.

I was looking into a possible general solution at language level to be
able to both implement the technologies and use them without extensions
or special compiler support. Another goal is to be technology-agnostic,
that is, a solution that enables the implementation of any of those
technologies as a library level.

As a first proof of concept, I did an analogy of
"expression templates" [5] for statements and flow control in a project
here: http://statement-templates.googlecode.com. Main thing here is that
statements (and flow control operators) are objects. In this project, I
developed a "for" and a "parallel for" using plain C++ (with almost no
C++11 features intentionally), the latter segmenting the work and
launching threads to get the job done (and then passes the segments to a
vectorizing transformation). By using the template facilities in the
project, I was able to:

   - mimick overloading of the "for" statement
   - program pattern matching to identify the suitable optimizations
     (e.g. when to apply certain optimizations)
   - statements introspection
   - program transformations

By using these tools, a library can be done such that: optimizes/transforms
loops, parallelizes, vectorizes, calculates cyclomatic complexity, or even
adds coding rules (by adding static asserts when certain patterns are
found).

Far from trying to implement a program transformation library, I'm trying
to see what could the language offer to natively perform what I tried to
evaluate with a template metaprogramming library, adhering the 2-faced
language principle, so the user just provides a program with regular
statements (for, while, etc.), and includes a library that overloads them
to provide some optimization semantic (parallelism, vectorization, etc.);
and using another library, the original program already compiles, and the
optimization/transformation semantic changes.

With this mail, I'm proposing to start a discussion about the required
language extensions to be able to implement a transformation library
(which could be any of the technologies beforementioned). As far as I
could see with my experiment, I could identify flow-control operators
overloading, statements pattern recognition and transformations as the
needs to accomplish this goal. In the source of the project, the
interested reader can find a very initial proposed syntax.

My initial attempt to address the solution is to suggest that the
compiler provides linked statements in the way I proposed in the project
so the library can be written with template metaprogramming techniques
as I was able to do.

   Daniel.
   
References:

References:

[1] www.openmp.org
[2] www.cilkplus.org
[3] http://www.nvidia.com/object/cuda_home_new.html
[4] http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3530.pdf
[5] http://web.archive.org/web/20050315091836/http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html


-- 
[ comp.std.c++ is moderated.  To submit articles, try posting with your ]
[ newsreader.  If that fails, use mailto:std-cpp-submit@vandevoorde.com ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]

Back to comp.std.c++ | Previous | Next | Find similar


Thread

flow-control operators overloading for "statement templates" aiding a   generic solution for parallel technologies a program transformations danielgutson@googlemail.com - 2013-11-22 09:05 -0600

csiph-web