Hello Stephane, We have a Scilab program which performs a numerical integration on data points in 3-dimensions - it has two nested loops. When the number of data points was large this was slow so we implemented the calculation function in C and got a speed improvement of about 24 times !
We also found three other improvements: using pointer arithmetic was faster than 'for' loops, 'pow(x, 2)' was faster than x*x, handling the data as 3 (N x 1) vectors was faster than using 1 (N x 3) matrix. each of these giving something like a 3-4% improvement - small compared to x24 but still worth having. If you don't mind tackling the dynamic linking it's probably worth the effort if you'll use this program a few times - good luck. Adrian. Adrian Weeks Development Engineer, Hardware Engineering EMEA Office: +44 (0)2920 528500 | Desk: +44 (0)2920 528523 | Fax: +44 (0)2920 520178 awe...@hidglobal.com Unit 3, Cae Gwyrdd, Green meadow Springs, Cardiff, UK, CF15 7AB. www.hidglobal.com From: Stéphane Mottelet <stephane.motte...@utc.fr> To: "International users mailing list for Scilab." <users@lists.scilab.org> Date: 23/04/2015 22:52 Subject: [Scilab-users] Ways to speed up simple things in Scilab ? Sent by: "users" <users-boun...@lists.scilab.org> Hello, I am currently working on a project where Scilab code is automatically generated, and after many code optimization, the remaining bottleneck is the time that Scilab spends to execute simple code like this (full script (where the vector has 839 lines) with timings is attached) : M1_v=[v(17) v(104) v(149) -(v(18)+v(63)+v(103)) -(v(18)+v(63)+v(103)) v(17) ... v(104) v(149) ] This kind of large vectors are the used to build a sparse matrix each time the vector v changes, but with a constant sparsity pattern. Actually, the time spent by Scilab in the statement M1=sparse(M1_ij,M1_v,[n1,n2]) is negligible compared to the time spent to build f M1_v... I have also noticed that if you need to define such a matrix with more that one column, the time elapsed is not linear with respect to the number of columns: typically 4 times slower for 2 columns. In fact the statement v=[1 1 ... 1000 1000] is even two times slower than v1=[1 ... 1000]; v2=[1 .... 1000]; v=[v1 v2]; So my question to users who have the experience of dynamic link of user code : do you think that using dynamic link of compiled generated C code could improve the timings ? In advance, thanks for your help ! S. [attachment "test.sce" deleted by Adrian Weeks/CWL/EU/ITG] _______________________________________________ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users
_______________________________________________ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users