Compare inv(X) Vs mex inv (X)

Hi all
I wrote a simple program which calculates inverse matrix size (100*100).
function y = test_inv(x) %#codegen
% test inverse matrix
y = inv(x);
end
I created mex function test_inv_mex and tested running time.
x = randn(100);
tic;
for n = 1: 100
y = test_inv(x);
end
toc;
tic;
for n = 1: 100
y = test_inv_mex(x);
end
toc;
This is my resulte :
Elapsed time is 0.054418 seconds.
Elapsed time is 0.613990 seconds.
My question is :
Why the mex function run much slower than regular one ?
B.R
Zohar

댓글 수: 4

Yash
Yash 2012년 7월 8일
dont use INV, try some other option instaed of INV because if you use it, in newer version it gives that its old and try something diff apart from that
check out help*
  • Y = inv(X) returns the inverse of the square matrix X. A warning message is printed if X is badly scaled or nearly singular.
In practice, it is seldom necessary to form the explicit inverse of a matrix. A frequent misuse of inv arises when solving the system of linear equations . One way to solve this is with x = inv(A)*b. A better way, from both an execution time and numerical accuracy standpoint, is to use the matrix division operator x = A\b. This produces the solution using Gaussian elimination, without forming the inverse. See \ and / for further information.
Jan
Jan 2012년 7월 8일
@zohar: Please explain, how you have "created the mex function". It matters if you have a hand-coded function, call the optimized ATLAS or BLAS functions, or if you let the code generator do this, which is implied by the comment "%#codegen" appearing in your code. Good answers require no guessing of important details.
@Yash: Without doubt you a right. But zohar's question concerned another topic.
zohar
zohar 2012년 7월 8일
Hi Yash,
I understand the disadvantage using inv(X).
Why the mex function run much slower than the regular one ?
zohar
zohar 2012년 7월 8일
Hi Jan,
I am new with codegen, but I saw that if I unchecked everything under project setting general the mex function run faster but still slower than regular one! (but warnnings appears ).
Any help ?

댓글을 달려면 로그인하십시오.

 채택된 답변

Mike Hosea
Mike Hosea 2012년 7월 9일
편집: Mike Hosea 2012년 7월 10일

1 개 추천

I think it's rather likely with a difference of that magnitude that you have left memory integrity checks on. Try
>> cfg = coder.config('mex');
>> cfg.IntegrityChecks = false;
>> cfg.ResponsivenessChecks = false;
>> codegen test_inv -args {zeros(100)} -config cfg
>> x = randn(100);
tic;
for n = 1: 100
y = test_inv(x);
end
toc;
tic;
for n = 1: 100
y = test_inv_mex(x);
end
toc;
Elapsed time is 0.082537 seconds.
Elapsed time is 0.109494 seconds.
The remaining difference is not surprising since there is some overhead and we are essentially just comparing the compiled and optimized MATLAB implementation to the compiled MATLAB Coder implementation. MATLAB Coder is not intended to speed up MATLAB linear algebra. They are mostly compiled and highly optimized routines. If it could do much of that, we'd just speed up the MATLAB implementation. If you want to see it speed something up, you usually need to have a substantial amount of your code in there. Also, in this particular case there are some differences in the algorithms. MATLAB Coder is generating unblocked code, and here the matrix is large enough that I would rather use a blocked algorithm.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Execution Speed에 대해 자세히 알아보기

태그

질문:

2012년 7월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by