Как ускорить создание матриц в Matlab во время итерации? - PullRequest
0 голосов
/ 23 сентября 2018

Мне нужно создать квадратную матрицу $ V $ итеративно более 100000+ раз за пачку.Если просто делать это традиционно, вычислительное потребление составляет около 70 с. (Более 1 минуты), и мне нужно повторить этот процесс для более 100 упаковок. Это примерно 1 час дополнительного времени.

Мне показалось, чтопри вычислении матрицы с использованием двойного для цикла $ V (x, y) $, matlab использует только один поток.Однако в компьютере 12 потоков, и должен быть способ использовать все из них для более быстрого назначения матрицы.

Тип функции: $ V (x, y) = exp ((x-вариация_1). ^ 2+ (y-вариация_2). ^ 2) $

Я думал об использованииGPU.Однако, как оказалось, массив GPU вычисляет его намного медленнее, чем CPU.

Я также думал об использовании функции parpool.Однако не только стоит больше времени на отправку матрицы в параллельный пул, но также отказано в доступе к самому $ V $.

Как я могу указать ЦПУ на вычисление матрицы со всеми потоками вбыстрая скорость?

1 Ответ

0 голосов
/ 23 сентября 2018

Вы должны всегда использовать матричные и векторные операции, а не для цикла.
Если x и y постоянны для всех случаев, вы можете использовать meshgrid для генерации x и y один раз.

Например, рассмотрим следующий код, который использует двойной цикл for:

v = zeros(10000,10000);
tic;
for x=1:10000
    for y = 1:10000
        v(x,y) = exp((x/10000).^2+(y/10000).^2);
    end
end
toc

На моем компьютере он работает около 11 секунд.
Теперь с помощью meshgrid:

%This is done only once
[x,y] = meshgrid((1:10000)/10000,(1:10000)/10000);

tic;
v = exp(x.^2+y.^2);
toc

Это занимает около 4 секунд, не включая meshgrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...