How to run in same time as C
2 ビュー (過去 30 日間)
古いコメントを表示
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
0 件のコメント
採用された回答
Walter Roberson
2013 年 6 月 25 日
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 件のコメント
その他の回答 (2 件)
David Sanchez
2013 年 6 月 25 日
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.
0 件のコメント
Jan
2013 年 6 月 25 日
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.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!