Boost logo

Boost :

Subject: Re: [boost] Interest in a GPU computing library
From: Kyle Lutz (kyle.r.lutz_at_[hidden])
Date: 2012-09-19 08:20:55


On Wed, Sep 19, 2012 at 2:23 AM, Thomas Heller <thom.heller_at_[hidden]> wrote:
> On 09/18/2012 08:06 PM, Eric Niebler wrote:
>>
>> On 9/18/2012 10:45 AM, Andrey Semashev wrote:
>>>
>>> On Tuesday 18 September 2012 13:58:24 Felipe Magno de Almeida wrote:
>>>>
>>>> Could it use boost.phoenix v3? IUC, Phoenix v3 creates a boost.proto
>>>> expression. The library could make transformations to these
>>>> expressions.
>>
>> Yes, phoenix was designed to make this sort of application possible.
>
> Indeed.
>
>>> 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.
>>
>> True, you would need a different back-end.
>
> Indeed.
>
>>> IIUC, the
>>> constructed expressions are not invoked but translated into strings (the
>>> C99
>>> source code). Using Proto directly seems more appropriate.
>>
>> Just because you need a different back-end doesn't mean the phoenix
>> front-end is worthless. Phoenix has defined a schema that maps C++
>> statements onto C++ expressions and provides the components to build
>> these expressions for you. To ignore that and rebuild it from scratch
>> seems like a waste to me.
>>
>> Besides, having a way to take a single phoenix expression and evaluate
>> it in different ways -- on a CPU with the built-in Phoenix evaluators,
>> or on a GPU with alternate ones -- sounds bloody cool, and very useful.
>>
> I have to fully agree here. The external transforms we put tremendous effort
> into were designed for exactly that purpose. I would not like to see this
> going to waste hand have yet another lambda library implemented. I even put
> up an example for this
> http://www.boost.org/doc/libs/1_51_0/libs/phoenix/example/parallel_for.cpp
> (Ok, this is for openmp, but i think it shows the basic direction one could
> go). Instead of executing the expression in the evaluation you create a
> string and be done with it. Reuse a subset of the already existing phoenix
> expressions, generate an error on the unsupported ones, use the phoenix
> extension mechanism to create Boost.Compute "overloads" for regular
> functions. Bloody cool indeed and on my list from day 1 we had the external
> transforms in place.
> So question to Kyle is: What did you miss from phoenix 3?

Truthfully, I've never used (or even really taken a close look at)
Boost.Phoenix. The Proto library seemed to have the functionality I
needed and thus I used that.

I will take a look at Boost.Phoenix 3 and see if it will work for
Boost.Compute. Thanks for providing the example link.

Cheers,
Kyle


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