Fastest way for page-wise computation - FOR vs ARRAYFUN vs PAGEFUN

6 views (last 30 days)
I'd like to know the fastest way to deal with a 3D array in a page-wise way. Suppose I have the following data:
data = randi([1, 10], 10, 10, 1000); % sample data
and I want to know the inverse matrix of each page of this data. I compared three approaches to compute this:
% Approach1 - FOR loop
data_inv1 = zeros(10,10,1000);
for ii = 1:size(data,3)
data_inv1(:,:,ii) = inv(data(:,:,ii));
time1 = toc;
% Approach2 - Arrayfun
data_inv2 = arrayfun(@(ii)inv(data(:,:,ii)), 1:size(data,3), 'UniformOutput', false);
time2 = toc;
% Approach3 - Pagefun
data_gpu = gpuArray(data);
data_inv3 = pagefun(@inv, data_gpu);
time3 = toc;
% Comparison of elapsed times
fprintf('FOR-loop: %.8f sec\n', time1);
fprintf('Arrayfun: %.8f sec\n', time2);
fprintf('Pagefun: %.8f sec\n', time3);
The results on my computer are shown below:
FOR-loop: 0.01121580 sec
Arrayfun: 0.01491200 sec
Pagefun: 0.01317000 sec
Surprisingly, the use of the for-loop was the fastest. I expected that pagefun will give me the fastest computation but that was not the case.
Has anyone tried different approaches to speedup the page-wise computation? Is there anyway to make a good use of pagefun?
Joss Knight
Joss Knight on 9 May 2022
What GPU do you have? I suspect pagefun will be faster if you process in single precision.

Sign in to comment.

Answers (0)





Community Treasure Hunt

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

Start Hunting!