Implicit casting overhead from real to complex when multiplying two matrices

1 Ansicht (letzte 30 Tage)
Is there an implicit casting overhead when multiplying a complex matrix by a real matrix to upcast the real matrix to complex or is it a natively-supported operation?
I have tried the following sample code but I get inconsistent results when changing the matrices dimension N.
N = 100;
A = rand(N);
B = rand(N);
C = complex(A);
tic
D1 = B*A;
toc
tic
D2 = B*C;
toc

Akzeptierte Antwort

Benjamin Thompson
Benjamin Thompson am 11 Aug. 2022
Multiplying a complex matrix by a real matrix requires fewer calculations so should take less time. Your test is a little too simple since B would have already been cached into memory for the second part. If you do B*A twice, it is a lot faster the second time.
  1 Kommentar
Daniele Giovannini
Daniele Giovannini am 23 Aug. 2022
You are right. I have tried to eliminate the cache from playing a role in two ways:
  • having variables small enough to fit in the cache (my CPU cache is 3 MB) at the same time and repeating many times each matrix product
  • having variables so big that they cannot possibly be cached and perform each matrix product only once
Both ways seem to confirm your answer. I am reporting my test code for completeness.
% Test 1
N = 150;
C = crand(N);
A_R = rand(N);
A_C = complex(A_R);
whos
tic
for n = 1:1e4
D1 = C*A_R;
end
toc
tic
for n = 1:1e4
D2 = C*A_C;
end
toc
% Test 2
N = 3000;
C = crand(N);
A_R = rand(N);
A_C = complex(A_R);
whos
tic
D1 = C*A_R;
toc
tic
D2 = C*A_C;
toc

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

James Tursa
James Tursa am 10 Jul. 2023
This is not a natively supported operation (to use your terms). Yes, the real matrix must be first upconverted to a complex matrix (deep data copy with interleaved 0's) in order to call the BLAS matrix multiply routines in the background, since the BLAS library has no mixed complex-real routines. This will be a performance hit because of the deep data copy and all those unnecessary 0 multiplies. See the related discussion and explanations here:

Kategorien

Mehr zu Performance and Memory finden Sie in Help Center und File Exchange

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by