On Sunday, 9 October 2016 at 13:28:05 UTC, Manu wrote:
On 9 October 2016 at 15:34, Ilya Yaroshenko via Digitalmars-d <[email protected]> wrote:
On Sunday, 9 October 2016 at 05:21:32 UTC, Manu wrote:

On 9 October 2016 at 14:03, Nicholas Wilson via Digitalmars-d <[email protected]> wrote:

[...]


Well the trouble is the lambda that you might give to 'map' won't work anymore. Operators don't work on batches, you need to use a completely different API, and I think that's unfortunate.


Could you please give an example what type of operation should be vectorized?

Even operations that don't require shuffling, eg:
  RGBA8[] a, b;
  zip(a, b).map!(e => e[0] + e[1]).copy(output);

Which I've suggested before (and Walter liked the idea), could be sugared up by making use of the languages largely under-used array
operation syntax:
  output[] = a[] + b[]; // ie, types have overloaded addition
operators, so this array expression would be lowered to the pipeline expression above. This would be super-useful for HEAPS of things!

Even these still need to be done in batches since colour adds are saturating operations, and there are SIMD instructions for saturating arithmetic, so we basically always have to do colour work in SIMD, which means batching, and that basically ruins any chance for natural, readable, expressions in your code. I want to find a way that we can express these operations naturally, without having to always manually handle the batching.

If we can get there, then I will say D is a good language for stream-data processing.

What about forwarding the array ops to a foreach of the static array?
Like as above but instead of:

ElementType!(R)[N] batch;

have:

static struct Batch
{
    ElementType!(R)[N] elements;
    auto get() { return elements[];}

Batch opBinary(string op)(Batch rhs) if(hasOperator!(ElementType!(R),op))
    {
        Batch b;
foreach(i; iota(N)) mixin("b.elements[i] = elememts[i]" ~op~"rhs.elements[i]");
        return b;
    }
    //repeat for opUnary,opOpAssign...
}
Batch batch;

I'll make another forum thread for this.

Reply via email to