[vsipl++] [patch] CML bindings for matrix transpose operations

Jules Bergmann jules at codesourcery.com
Thu Jun 5 13:50:44 UTC 2008


Stefan, Don,

> 
> for the first case, which I find much more readable than the macro
> code above.

I agree that macros are pretty much always less readable than straight 
code (in fact the first thing I usually do when debugging a problem in a 
macro is manually expand it).

However, in defense of Don's approach, the macros will quickly scale 
when CML supports additional types (double, complex<double>, int, short, 
etc etc).  Moreover, the functions created by the macros don't do much 
(just wrap a CML function with a consistent overloaded function 
interface), so there isn't much to understand.

The other way to get more mileage out of the macros is to use them for 
more than just a single function.  Transpose is an example of a 1-input, 
1-output matrix function.  Instead of calling the macro 
VSIP_IMPL_CML_TRANS, it could be called VSIP_IMPL_CML_MUNARY ("matrix 
function, unary ~ 1 argument").  Then the macro could be reused across 
mtrans, matrix copy (when we add it), and so on.  We don't have too many 
unary matrix functions yet, but the idea generalizes.

> 
> 
>> +  static bool rt_valid(DstBlock& dst, SrcBlock const& src)
>> +  { +    bool rt = true;
>> +
>> +    // If performing a copy, both source and destination blocks
>> +    // must be unit stride.
>> +    if (Type_equal<src_order_type, dst_order_type>::value)
>> +    {
>> +      Ext_data<DstBlock> dst_ext(dst, SYNC_OUT);
>> +      Ext_data<SrcBlock> src_ext(src, SYNC_IN);
> 
> These objects only exist to check the strides, right ? I'm aware that we 
> don't have any SYNC enumerators to indicate 'no-copy', but shouldn't we 
> ? Using SYNC_OUT and SYNC_IN looks a bit misleading to me, in this 
> context. Jules ?

I think SYNC_OUT and SYNC_IN make sense because they indicate how the 
data access will be used.

Because ct_valid includes a check that the cost of data access is 0, in 
rt_valid there is no danger that data access will require a copy.

Using SYNC_OUT and SYNC_IN allows the rt_valid declarations to exactly 
match those used in exec.

				-- Jules

-- 
Jules Bergmann
CodeSourcery
jules at codesourcery.com
(650) 331-3385 x705



More information about the vsipl++ mailing list