Hi Damian —

Sorry for the belated response. I believe that what you've written here should be fine performance-wise; specifically, that no temporary will be introduced to capture the RHS '[(r, c) in slab] ...' expression.

-Brad


On Tue, 1 Sep 2020, Damian McGuckin wrote:


On another point in the same code, I try and grab several adhacent rows from the original matrix 'v' and transpose them, and put them into what I call a slab. It is not a tile like you see in the chapel DGEMM.

        var vslab : [cslice, common] R;
//either
       [(r, c) in vslab.domain] vslab[r, c] = v[c, r];
//or
        [j in cslice] vslab[j, common] = v[j, common];

where R is a general real(?w).

Technically vslab is 'const' so I stabbed in the dark and tried

        const slab : domain(2) = (cslice, common);
        const vslab = [(r, c) in slab] v[c, r];

It seems to run in the same elapsed time, is genuinely 'const', and looks cleaner.

Does it create any un-necessary data, i.e. does it create a temporary on the right before assigning to vslab or does it do it only in cslice*common
real(?w) numbers?

Thanks - Damian

Pacific Engineering Systems International, 277-279 Broadway, Glebe NSW 2037
Ph:+61-2-8571-0847 .. Fx:+61-2-9692-9623 | unsolicited email not wanted here
Views & opinions here are mine and not those of any past or present employer
_______________________________________________
Chapel-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-developers

Reply via email to