Оптимизация графического процессора для векторизованного кода
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