Оптимизация графического процессора для векторизованного кода

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

Этот код реализует правило oja и работает медленно. Я больше не могу это векторизовать. Чтобы он работал быстрее, я хотел сделать вычисления на GPU, поэтому я изменил

X=gpuArray(X)

Но вместо этого код работал медленнее. Используемые вычисления, похоже, совместимы с GPU. Пожалуйста, дайте мне знать мою ошибку.

Вывод кода профиля:

Полная информация:https://drive.google.com/file/d/0B16PrXUjs69zRjFhSHhOSTI5RzQ/view?usp=sharing

Ответы на вопрос(1)

Ваш ответ на вопрос