Specifying page dimensions in pagefun()

Is there a way to indicate which pages are specified in the pagefun() function?
For example, I have three arrays--A, B and C--with size(A) = [a,b,d],size(B) = [b,c,d], and size(C) = [a,c,d]. I would like to optimize the following code:
sol = zeros(a,d);
for ii = 1:d
temp = A(:,:,ii) * B(:,:,ii);
sol(:,ii) = sum(C(:,:,ii) .* temp,2);
end
Using pagefun() and arrayfun(), if possible, on the GPU (note: it currently runs fine on the GPU as is by casting A/B/C as gpuArrays, I'm looking to optimize). I haven't found any good documentation for how pagefun() chooses which pages to apply to. In this example, A and B share two similar dimensions (a and d), but I believe we only want the computation done over the third dimension (d). How is pagefun() applied in this case?

 Réponse acceptée

Matt J
Matt J le 17 Oct 2018
Modifié(e) : Matt J le 19 Oct 2018

2 votes

PAGEFUN always extracts pages by indexing the 3rd dimension. In other words the i-th page is always obtained as if by doing A(:,:,i). If A happens to have more than 3 dimensions, then i is treated as a linear index. If A has fewer than 3 dimensions, then it is effectively replicated along the 3rd dimension, so that it has the same number of pages as the other arguments.

2 commentaires

Matt J
Matt J le 17 Oct 2018
Modifié(e) : Matt J le 17 Oct 2018
So, in your example, you would apply pagefun as follows:
temp = pagefun(@mtimes,A,B) ;
sol=squeeze( sum(C.*temp,2) );
Blaine
Blaine le 20 Oct 2018
Thank you! Makes sense, works great and I'm seeing a 3x speedup by doing away with the for loop and using pagefun()!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Produits

Version

R2016b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by