Otimização de GPU para código vetorizado

function w=oja(X, varargin)

% get the dimensionality
[m n] = size(X);

% random initial weights
w = randn(m,1);

options = struct( ...
    'rate', .00005, ...
    'niter', 5000, ...
    'delta', .0001);
options = getopt(options, varargin);
success = 0;

% run through all input samples
for iter = 1:options.niter
    y = w'*X;
    for ii = 1:n       
        % y is a scalar, not a vector
        w = w + options.rate*(y(ii)*X(:,ii) - y(ii)^2*w);
    end
end
if (any(~isfinite(w)))
    warning('Lost convergence; lower learning rate?');
end

end

size(X)= 400 153600

Esse código implementa a regra do oja e fica lento. Não sou mais capaz de vetorizá-lo. Para acelerar, eu queria fazer cálculos na GPU, portanto mudei

X=gpuArray(X)

Mas o código ficou mais lento. O cálculo usado parece ser compatível com a GPU. Por favor, deixe-me saber o meu erro.

Saída do código do perfil:

Detalhes completos:https://drive.google.com/file/d/0B16PrXUjs69zRjFhSHhOSTI5RzQ/view?usp=sharing

questionAnswers(1)

yourAnswerToTheQuestion