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

조회 수: 10 (최근 30일)
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.

채택된 답변

Edric Ellis
Edric Ellis 2024년 2월 27일
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
Anders
Anders 2024년 2월 27일
편집: Anders 2024년 2월 27일
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?
Edric Ellis
Edric Ellis 2024년 3월 4일
I believe the constant data used inside the nested function here does not need to be duplicated.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 GPU Computing에 대해 자세히 알아보기

태그

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by