Vectorised a nested conditional function for gpuarray & arrayfun

6 Ansichten (letzte 30 Tage)
Hi, I have a class which has many arrays and a nested functions.
The goal is I want to make all the arrays as gpuarray and use arrayfun, to be run in GPU, thus I'd like to have them well vectorised. Any thought? Thanks
%%the class
classdef egclass < handle
properties
cond = [1 1 1 0 0];
x = [10 20 30 40 50];
y = [0 0 0 0 0];
out= [0 0 0 0 0];
end
end
%%the function
function doOperation(eg)
[nR,nC] = size(eg.cond);
%%need to be vectorised!!!
for i = 1:nC
if eg.cond(i) == 0
doTimes(eg,i);
end
if eg.cond(i) == 1
doAdd(eg,i);
end
end
end
function doTimes(eg,i)
eg.out(i) = eg.x(i) * eg.y(i);
end
function doAdd(eg,i)
eg.out(i) = eg.x(i) + eg.y(i);
end
%%debug.m
clear all; clc;
eg = egclass;
doOperation(eg);

Akzeptierte Antwort

Daniel Simmons
Daniel Simmons am 10 Okt. 2014
Hi Sendy,
If you're trying to use arrayfun to pass the arrays to the GPU inside the class, this is no problem! Just use this as your member function:
function doOperation(eg)
gpu_x = gpuArray( eg.x );
gpu_y = gpuArray( eg.y );
gpu_cond = gpuArray( eg.cond );
eg.out = arrayfun( @doAddOrTimes, gpu_cond , gpu_x, gpu_x );
end
where the "doAddOrTimes" function will incorporate the "if" statement. Of course, this function, and any others used on the GPU, will have to be an external function with no class attributes. As far as I'm aware, manipulating classes on the GPU is not possible.
Dan

Weitere Antworten (0)

Kategorien

Mehr zu GPU Computing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by