<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Tim,<br>
<br>
Using global variables as well saves time.<br>
Here attached is Clement's bench tests extended to global
variables and global lists.<br>
Typical results on my PC are (in [s]) :<br>
<br>
<small><tt>-->exec('C:\computation.sci', -1)</tt><tt><br>
</tt><tt>local LISTS: not assigned: 0.34 create recipient:
1.362 assign2 existing recipent: 1.116</tt><tt><br>
</tt><tt>local vars: not assigned: 0.41 create recipient:
0.512 assign2 existing recipent: 0.502</tt><tt><br>
</tt><tt>Global vars: not assigned: 0.34 create recipient:
0.96 assign2 existing recipent: 0.34</tt><tt><br>
</tt><tt>Global LISTS: not assigned: 0.34 create recipient:
0.7 assign2 existing recipent: 0.32</tt><tt><br>
</tt></small><br>
By the way, AFAIK, graphical handles are global objects passed by
reference. Clement, aren't they?<br>
It is possible to hide some data in their .userdata field ; but it
is somewhat hacking, and it could be tricky to avoid creating
explicitly or implicitly local copies of this field's content when
working with it...<br>
Creating a pseudo graphic with output driven to "null" and then
using this hack could extend the test bunch ;) <br>
<br>
Regards<br>
Samuel<br>
<br>
Le 24/02/2015 22:38, Tim Wescott a écrit :<br>
</div>
<blockquote cite="mid:1424813920.2129.194.camel@servo" type="cite">
<pre wrap="">
I have an algorithm that I'm working on that involves having large data
sets, which I'm currently representing as tlists. Due to the
constraints of the algorithm, I'm doing many calls that are more or less
of the form:
my_tlist = some_function(my_tlist);
The intent is to get the same effect that I would get if I were in C or
C++, and wrote:
some_function(& my_structure);
or
my_class.some_function();
It appears, from the significant loss of execution speed when I do this,
that Scilab is copying the results of the function into the "my_tlist"
variable byte by byte.
At this writing, the only way that I can see to fix this is to invoke
the function as:
some_function("my_tlist");
and then wherever I modify data have use an exec function, i.e., replace
local_tlist.some_field = stuff;
with
exec(msprintf("%s = stuff", local_tlist_name));
This seems clunky in the extreme.
Is there another way to do something like this that doesn't force Scilab
to copy large chunks of data needlessly, but allows me to operate on
multiple copies of similar tlists?
Thanks.
</pre>
</blockquote>
<br>
</body>
</html>