Why is it not possible to pass matrix parameters as argument to GPU arrayfun and what to do?

Background
  1. The problem can be separated into a large number of independent sub-problems.
  2. All sub-problems share the same matrix parameters of significant sizes.
  3. Each sub-problem performs an operation involving the matrix parameters that is hard to express with linear algebra.
  4. The goal is to process the sub-problems in paralell on the GPU.

 Respuesta aceptada

It would be great to see a simplified example of what you're trying to do. What you can do with gpuArray/arrayfun is write a nested function to access constant data from a parent workspace, a bit like this:
function [r,c] = example
% up-level variables that we will access inside the nested
% function "iFindLocation"
mat = gpuArray(magic(4));
[m,n] = size(mat);
[r,c] = arrayfun(@iFindLocation, gpuArray(1:100));
function [r,c] = iFindLocation(in)
r = NaN; c = NaN;
for i = 1:m
for j = 1:n
% Access the matrix "mat" from the parent
% workspace
if mat(i,j) == in
r = i;
c = j;
end
end
end
end
end

2 comentarios

Anders
Anders el 27 de Feb. de 2024
Editada: Anders el 27 de Feb. de 2024
99% of the code used for this project can be regarded as a black box function analogous to the function iFindLocation.
Your example code represents this problem nicely.
Follow-up question
For arrayfun to work in paralell, does it need to store copies of the matrix mat in GPU memory or is it enougth with just the one?
I believe the constant data used inside the nested function here does not need to be duplicated.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2023b

Etiquetas

Preguntada:

el 27 de Feb. de 2024

Comentada:

el 4 de Mzo. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by