From the looks of it this kind of stuff should be easy with tokenzied strings ( q{ code } )+ mixins + some "auto-magic" helpers being run for OpenCL behind the covers. The problematic part is checking that the fragment is using the correct subset of both languages.

Ideally API should work along the lines of this:

float[] arr1, arr2;
//init arr1 & arr2
assert(arr1.length == arr2.length);
length = arr1.length;
compute!q{
        for(int i=0;i<length; i++)
                arr1[i] += arr2[i];
}(arr1, arr2);

where compute works both with plain CPU and even without OpenCL (by simply mixin stuff in) and for OpenCL with a bit of extra binding magic inside compute template.

(compute is an eponymous template that alied to static function inside, that in turn is generated by mixin, for concrete example - take a look on how ctRegex template in std.regex does it)

Of course, there are some painful details when you go for deeper things and error messages but it should be perfectly doable in normal D even w/o say CTFE parser.

Awesome, thanks! Will chew on this for a while :)

Reply via email to