Boost logo

Boost :

Subject: Re: [boost] Interest in a GPU computing library
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2012-09-18 13:45:12


On Tuesday 18 September 2012 13:58:24 Felipe Magno de Almeida wrote:
> On Tue, Sep 18, 2012 at 1:28 PM, Kyle Lutz <kyle.r.lutz_at_[hidden]> wrote:
> > Thanks for all the comments and feedback so far! I’ve written up
> > answers to your questions below (which should serve as a good start
> > for a FAQ for the library). Please let me know if anything is not
> > clear or if I forgot to answer your question.
>
> [snip]
>
> > *** Is it possible to use ordinary C++ functions/functors or C++11
> > lambdas with Boost.Compute? ***
> >
> > Unfortunately no. OpenCL relies on having C99 source code available at
> > run-time in order to execute code on the GPU. Thus compiled C++
> > functions or C++11 lambdas cannot simply be passed to the OpenCL
> > environment to be executed on the GPU.
> >
> > This is the reason why I wrote the Boost.Compute lambda library.
> > Basically it takes C++ lambda expressions (e.g. _1 * sqrt(_1) + 4) and
> > transforms them into C99 source code fragments (e.g. “input[i] *
> > sqrt(input[i]) + 4)”) which are then passed to the Boost.Compute
> > STL-style algorithms for execution. While not perfect, it allows the
> > user to write code closer to C++ that still can be executed through
> > OpenCL.
>
> Could it use boost.phoenix v3? IUC, Phoenix v3 creates a boost.proto
> expression. The library could make transformations to these
> expressions.

Phoenix actors do contain Proto expressions. But as I understand, actors and
the additional components Phoenix implements to evaluate expressions in a
functional manner are useless in context of Boost.Compute. IIUC, the
constructed expressions are not invoked but translated into strings (the C99
source code). Using Proto directly seems more appropriate.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk