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?

 Akzeptierte Antwort

Matt J
Matt J am 17 Okt. 2018
Bearbeitet: Matt J am 19 Okt. 2018

2 Stimmen

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Produkte

Version

R2016b

Gefragt:

am 17 Okt. 2018

Kommentiert:

am 20 Okt. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by