Matlab多執行緒運算的問題

2021-09-06 04:59:31 字數 1101 閱讀 4411

上次說到,matlab r2006a開始使用intel mkl,只要設好omp_num_threads這個環境變數,即可以blas level 3的運算在任意執行緒數下。然而,儘管設定的執行緒數和cpu核的數目相同,但這樣也並不能保證能提公升計算效率。主要的原因在於建立執行緒也是需要時間的。如果你的任務只要0.0001秒就能算完,但建立執行緒也要用0.0001秒,那就根本沒有必要把該任務多執行緒化。

麻煩的是,當我們設定好環境變數omp_num_threads後啟動matlab,那麼這個程序執行的執行緒數就定下來了,不能中途改變。於是,我們沒有辦法根據具體問題隨時改變使用的執行緒數,使得在我們的程式中,能提公升某部份的效率,但另一部份的效率卻可能降低。

我們可以對矩陣乘法做一點測試,在不同的線性數下,看看不同的矩陣大小,其乘法的效率如何。首先編寫程式如下:

threads = 2;    % 執行緒數

n = 2000000;    % n / 矩陣大小 = 每種維度的矩陣要做乘法的次數

% 設定測試的矩陣大小

mn = 50;

step = 2;

x = 10 : step : mn;

n = max(size(x));

t = zeros(2, n);    % 用作存放結果

for i = 1 : n

m1 = zeros(x(i));

m2 = zeros(x(i));

m1 = rand(x(i));

m2 = rand(x(i));

t = cputime;    % 準備計時

for j = 1 : n / x(i)    % 令計算次數隨矩陣增大而減少

tmp = m1 * m2;

endt(:, i) = [x(i) (cputime - t) / threads];   % 存放結果

end可以在不同執行緒下計算,把t存起來。接著可以比較單執行緒下的計算結果t1和雙線程下計算的結果t2,有:

>> t = t1(2, :) ./ t2(2, :);

>> plot(t1(1, :), t, 'k')

可得出下圖。說明當矩陣大小約為20到30時,雙線程反而令矩陣乘法效率降低。當矩陣更小時,是否多執行緒效率更好,我不能保證,應該要作更仔細的驗算

Matlab多執行緒運算的問題

上次說到,matlab r2006a開始使用intel mkl,只要設好omp num threads這個環境變數,即可以blas level 3的運算在任意執行緒數下。然而,儘管設定的執行緒數和cpu核的數目相同,但這樣也並不能保證能提公升計算效率。主要的原因在於建立執行緒也是需要時間的。如果你的...

Matlab多執行緒與多核運算, 以及GPU加速

matlab支援多執行緒多核運算,並且可用gpu加速 軟體版本 matlab2015a windows10 i7 4710hq 16g gtx860m 4g 1.matlab多執行緒.preference computer vision system toolbox 勾選 use parallel ...

多執行緒(多執行緒的安全問題)

多執行緒的執行出現安全問題。非常可怕的問題,一出問題比較惱火 問題原因 重點 當多條語句在操作同乙個執行緒共享資料時,乙個執行緒對多條語句只執行了一部分,還沒執行完,另乙個執行緒參與進來執行。導致共享資料的錯誤。解決方法 對多條操作共享資料的語句,只能讓乙個執行緒都執行完,在執行過程中,其他執行緒不...