Vectorize a series of interpn calculations with GPU

17 次查看(过去 30 天)
Let's say I have a cell array with equal sized (but different) 4D datasets:
nPoints = 5;
dataCell = cell(1,nPoints);
for i = 1:nPoints
dataCell{i} = rand(3, 2, 4, 3);
end
For the data arays in each cell, I would like to carry out a 4D interpn. Let's say the interpolation sample arrays and targets for each dimension are as follows:
dimOneArray = [0.1 0.2 0.3];
dimTwoArray = [2 4];
dimThreeArray = [1 2 3 4];
dimFourArray = [0.3 0.6 0.9];
dimOneTarget = 0.15;
dimTwoTarget = 3;
dimThreeTarget = 2.5;
dimFourTarget = 0.4;
Then I would like to carry out nPoints interpn calculations in a vectorized manner i.e. I would like to produce the same result as below (interpArray) without a for loop:
interpArray = nan(nPoints, 1);
for i = 1:nPoints
interpArray(i) = interpn(dimOneArray, dimTwoArray, dimThreeArray, dimFourArray, cell2mat(dataCell(i)), dimOneTarget, dimTwoTarget, dimThreeTarget, dimFourTarget);
end
How would I use the GPU to carry out this calculation?

回答(1 个)

Meet
Meet 2024-9-9,4:50
Hi,
To perform interpolation of the given data on a GPU, you can perform the following steps:
  1. Transfer your “dataCell” array to the GPU using the “gpuArray” function.
  2. Initialize an empty array on the GPU to store the final interpolation results.
  3. Define a function handle that will be used to perform the interpolation.
  4. Use “arrayfun” function to apply the interpolation to each element of the “dataGPU” array.
% Convert dataCell array to gpuArray
dataGPU = cellfun(@gpuArray, dataCell, 'UniformOutput', false);
% Initialize result array which stores the result of the computation
interpArrayGPU = gpuArray.nan(nPoints, 1);
% Defining a function handle for interpolation
interpolateFunction = @(data) interpn(dimOneArray, dimTwoArray, dimThreeArray, dimFourArray, data, dimOneTarget, dimTwoTarget, dimThreeTarget, dimFourTarget);
% Using arrayfun to apply the interpolation function to each element of
% dataGPU array
interpArrayGPU = arrayfun(@(i) interpolateFunction(dataGPU{i}), 1:nPoints);
You can refer to the resources below for more information:

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by