How to run in same time as C

2 vues (au cours des 30 derniers jours)
sita
sita le 25 Juin 2013
Hi,
Below psudo code for a C program took 66 sec. Same thing i tried to do in MATLAB (please find code below) it is much slower.Is it possible to run in same time as C.Please clarify this it will be very helpful.
Thanks,
Sita
psudo code for C
for(int i=0; i < 10; i++){
x[1] = 2.0 + drand48();
//x[2] = 2.0 + drand48();
for(int j=0; j < 30; j++){
x[2] = 2.0 + drand48();
x[3] = 2.0 + drand48();
//x[4] = 2.0 + drand48();
for(int k=0; k < 60; k++){
x[4] = 2.0 + drand48();
x[5] = 2.0 + drand48();
x[6] = 2.0 + drand48();
for(int l=0; l < 80; l++){
x[7] = 2.0 + drand48();
x[8] = 2.0 + drand48();
for(int m=0; m < 100; m++){
x[9] = 2.0 + drand48();
x[10] = 2.0 + drand48();
val = calc_func(x);
if(val < min_so_far){
for(int p=1; p <= 10; p++){
best_comb[p] = x[p];
}
min_so_far = val;
}
}
}
}
}
}
MATLAB Code:
clear;
clc;
tic
countm=0;
n=1;
s=1;
for t=1:s
for i=1:10
x1=min1 + ((max1 - min1)*rand(1));
for j=1:40
x2=min2 + ((max2 - min2)*rand(1));
x3=min3 + ((max3 - min3)*rand(1));
for k=1:60
x4=min4 +((max4 - min4)*rand(1));
x5=min5 +((max5-min5)*rand(1));
x6=min6 +((max6-min6)*rand(1));
for l=1:80
x7=min7+((max7-min7)*rand(1));
x8=min8 + ((max8 - min8)*rand(1));
for m=1:100
x9=min9+((max9-min9)*rand(1));
x10=min10+((max10-min10)*rand(1));
countm=countm+1 ;
yal= fc10(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10);
minvals( countm)=min(yal);
end
end
end
end
end
minofall=min(minvals)
end
toc

Réponse acceptée

Walter Roberson
Walter Roberson le 25 Juin 2013
The "MATLAB Compiler" does not compile to machine language or to C or C++ (or Fortran). "MATLAB Compiler" bundles parts together into an executable, and the executable is effectively the same MATLAB engine, just with no command prompt. Everything in a normal MATLAB session is interpreted, and everything produced by MATLAB Compiler is interpreted.
There is also "MATLAB Coder", which does create C that can then be compiled to machine language. "MATLAB Coder" is higher cost, and there are quite a few parts of MATLAB that MATLAB Coder cannot handle yet.
  2 commentaires
sita
sita le 25 Juin 2013
Can mex file achieve same execution time as C ??
Jan
Jan le 25 Juin 2013
@sita: MEX-files are C files, such that they have exactly the same speed.

Connectez-vous pour commenter.

Plus de réponses (2)

David Sanchez
David Sanchez le 25 Juin 2013
It happens than C is much faster than Matlab. Even when Matlab is well optimized when it comes to processing speed, C is a lower level language and performs better than Matlab. Besides, if you try to use some built-in Matlab functions, you can improve your code significantly. Some other times, it just happens than you can not achieve the processing speed achieved with C code.

Jan
Jan le 25 Juin 2013
The pre-allocation is essential for the processing speed. Is minvals pre-allocated, e.g. with the maximal possible length?
Usually a one vector x with 10 elements is more efficient rhan 10 scalars.
The program calculates max9-min9 and max10-min10 192'000'000 times. Although the actual calculation is cheap, doing this repeatedly wastes time. Better:
offset = [min1, min2, min3, min4, min5, min6, min7, min8, min9];
scale = [max1, max2, max3, max4, max5, max6, max7, max8, max9] - offset;
x = zeros(1, 9);
for ...
x(1) = rand;
...
for m=1:100
x(9:10) = rand(1, 2);
x = x .* scale + offset;
yal = fc10(x);
...
But even here the whole vector x is multiplied in the inner loop. So here is still a big potential for improvements.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by