function varargout = xp_parfor (xp)
sz = size(xp);
% Index into each dimension, linearized.
[dim_indices{1:length(sz)}] = ind2sub(sz, (1:prod(sz))');
dim_indices = mat2cell(cell2mat(dim_indices), ones(prod(sz), 1), ones(length(sz), 1));
no_processes = size(dim_indices, 1);
[varargout{1:nargout}] = deal(xp);
outcell = cell(no_processes, nargout);
no_args_out = nargout;
parfor process = 1:no_processes
processout = cell(1, no_args_out);
[processout{1:no_args_out}] = xp.data{dim_indices{process, :}}();
outcell(process, :) = processout;
end
for arg = 1:nargout
varargout{arg}.data = reshape(outcell(:, arg), sz);
end
end