Hello Samuel, > > After some diving into the ast/types source code and debugging session I > > got some information : > > > > --> disp(%t) > > // gdb resolved the value as a <types::ArrayOf<int>> where m_iSize = 1 > > // (the size of the inner m_pRealData) > > --> disp([%t %f %t %f]) > > // gdb resolved the value as a <types::ArrayOf<int>> where m_iSize = 4 > > // (the size of the inner m_pRealData) > > > > So in Scilab 6, there is 4 byte per boolean; to me a first thing to do > > before changing the > > current > > implementation is to let `who()` return both the memory used (including the > > Scilab header) and > > the > > memory used by the inner data storage. > > > > Note: as discussed in this ML, the overhead per for Scilab datatype (not > > inner value) is 208 > > byte > > per value, to me it is more important to reduce it first as it will impact > > all ArrayOf based > > datatype. > > So, i understand that it is hard, or even impossible, or useless, to assess > the > impact of a change in term of back-compatibility wrt existing datafiles. > > I understand also that the Scilab devs team has finally decided -- at least > as a first step -- > to retrieve the former who() behavior to get the memory, so including the > Scilab header. > To me, it would be anyway better to drop the "word" unit (set of 8 bytes) and > to > return the memory preferably in bytes. Beyond the recovery of [x,mem]=who(..), > this would already be an improvement. > > As far as i understand it -- what's not sure --, i am not convinced by the > last point, in terms of > priority. > The main concern of the initial report is the better usage of the memory, > noticeably when doing operations on big arrays with big intermediate boolean > arrays. > Some operations may fail because of insufficient intermediate memory. > Now, even if 1000 variables are simultaneously defined in the workspace > -- this never happens, but let's assume it is so --, > and that each one takes 208 bytes (really per value ?? i assume it is rather > per container. Is it > right?), > then this uses 208 kbytes, what's nothing. > Now, if a single boolean array is defined and used to process a whole > 1000x1000x4 RGBA image, > it uses alone 16 MB instead of 4MB, that's >>> 208 kbytes. > Avoiding to waste these 12 MB was the main aim of my initial report. > > Please correct me if my calculations are wrong, with respect to this aim.
Your calculations are correct and I fully agree with you : wasting 4byte per boolean value might be an issue for some computation. To clarify, the idea behind reducing the ArrayOf<> size is to follow PHP internal value optimization [1] to improve performance on allocation (basically using less memory means having more Scilab values stored on fast smallbins allocated memory area). [1]: https://nikic.github.io/2015/05/05/Internal-value-representation-in-PHP-7-part-1.html -- Clément _______________________________________________ dev mailing list [email protected] http://lists.scilab.org/mailman/listinfo/dev
