MATLAB: Specifying page dimensions in pagefun()

arrayarrayfungpuMATLABmulti-dimensional arraynd-arrayoptimizationpagefunpagesparallel computingParallel Computing Toolbox

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?

Best Answer

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.