# How to use Sum and Dot function in GPU computation with arrayfun?

3 vues (au cours des 30 derniers jours)
Viraj Gandhi le 28 Déc 2022
Commenté : Joss Knight le 29 Déc 2022
I am trying to find a dot product of two arrays. The given code below is an example. I am new to GPU computing and any help is appreciated.
The main function is:
a = [1,2,3,4];
b = [5,6,7,8];
a=gpuArray(a);
b=gpuArray(b);
funOut = arrayfun(@protoDotProd,a,b);
The function where the dot product is below:
function funOut = protoDotProd(a,b)
cTemp = a+b; % Just an example. In reality, lots of operations
%% option1
% funOut = dot(a,cTemp);
%% option2
% funOutTemp = a.*cTemp;
% funOut = sum(funOutTemp);
%% option3
funOut = sum(a .* cTemp);
None of these options are working and giving me an error:
Error using dotTest
Function passed as first input argument contains unsupported or unknown function 'sum' (or 'dot' for option 1).
Error in 'protoDotProd' (line: 6)
##### 1 commentaireAfficher AucuneMasquer Aucune
Voss le 28 Déc 2022

Connectez-vous pour commenter.

### Réponse acceptée

Joss Knight le 28 Déc 2022
You cannot perform vector operations in GPU arrayfun. The a and b arguments to your function are not the whole array, they are the scalar values of each element.
Do your element-wise operations ("lots of operations" in your words, followed by the element-wise multiplication) inside your arrayfun function and then do the sum.
##### 2 commentairesAfficher 1 commentaire plus ancienMasquer 1 commentaire plus ancien
Joss Knight le 29 Déc 2022
Exactly correct, yes. Except that you can only perform scalar operations on those scalars (so you can't form an array by concatenating the two values for instance).

Connectez-vous pour commenter.

### Catégories

En savoir plus sur GPU Computing dans Help Center et File Exchange

R2022a

### Community Treasure Hunt

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

Start Hunting!

Translated by