10 ビュー (過去 30 日間)
Emiliano Rosso 2019 年 6 月 30 日

Hello everyone.
I'm going to buy a dual CPU workstation and would like to know if a vectorized MATLAB code uses
all the cores of both CPUs without the need to
use the Parallel Computing Toolbox.
Thanks!
##### 4 件のコメント表示非表示 3 件の古いコメント
Emiliano Rosso 2019 年 6 月 30 日
[m,n]=size(matrix);
for i=1:m
for l=1:n
matrix(i,l)=matrix(i,l)^2;
end
end
I vectorize the code :
[m,n]=size(matrix)
matrix(:,:)=matrix(:,:)^2
if I use 1 cpu xeon w3550 4 cores 8 thread:
1200 sec.
if I use 1 cpu xeon w3680 6 cores 12 thread:
800 sec.
The 2 cpu are identical except for the number of cores and I can verify that all thread are
working in both cases.
Now :
if I use 2 cpu xeon w3680 6 cores 12 thread does my code will use the second cpu?

サインインしてコメントする。

### 採用された回答

Jan 2019 年 6 月 30 日

Yes. Matlab will use the available cores. At least most likely. Matlab might split the array columnwise and if the input has 5 columns, there is a chance that only 5 cores are used. Many functions are multi-threaded, but this is applied for "large" arrays only.
I'm not sure, if hyper-threading is used in Matlab. Maybe only the physical cores are used for the reason of efficiency.
Note that:
[m,n]=size(matrix);
for i=1:m
for l=1:n
matrix(i,l) = matrix(i,l)^2;
end
end
and
[m,n]=size(matrix)
matrix(:,:)=matrix(:,:)^2;
do not compute the same result. The 2nd code works for square matrices only and is a matrix multiplication. Equivalent to the first code would be:
% No need to determine the size...
matrix(:,:) = matrix(:,:) .^ 2;
% ^ elementwise squaring
It would be even more efficient, to omit the (:,:):
matrix = matrix .^ 2;
##### 1 件のコメント表示非表示 なし
Emiliano Rosso 2019 年 6 月 30 日
The " ^ " instead of ".^ " was a mistake.

サインインしてコメントする。

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!