Sounds fair to me On Wed, Nov 13, 2019, 21:21 Henry Rich <[email protected]> wrote:
> There's no guarantee that an amend will be inplace. If the value of the > name is also assigned to another name, inplacing is impossible. > > Henry Rich > > > > On 11/13/2019 12:06 AM, Ben Gorte wrote: > > Yeah, it always looks a bit scary to do X =: A I}X to modify only a small > > part of X, but at the end of > > https://www.jsoftware.com/help/jforc/modifying_an_array_m.htm > > we are promessed that J does that in place. > > > > I think this should not change when A depends on what was already there, > in > > I{X, as is very often the case. Of course it is important whether you > agree > > :-) > > > > In your example you're moving things somewhere else inside the array. I > > sort of understand it can be tricky to do that in-place when the source > and > > the destination overlap. > > > > > > > > On Wed, 13 Nov 2019 at 14:43, Henry Rich <[email protected]> wrote: > > > >> I should say, you can't count on the JE to make the best decision > >> unaided. If you write > >> > >> big =: i. 1e4 1e4 > >> big =: (1 { big) 2} big > >> > >> it will not run inplace & will be very slow. Why? Because (1 { big) > >> will produce a virtual result, i. e. a noun whose data is mapped to a > >> subarray of another noun (viz big). > >> > >> Having the virtual result extant makes big ineligible for inplacing, so > >> the 2} requires copying big. The JE can't look ahead to see that it > >> should forego inplacing { for the greater good of inplacing big} . > >> > >> In this case, you must assign (1 { big) to a name, which will realize > >> the value and remove the restraint on inplacing big} . > >> > >> Henry Rich > >> > >> > >> On 11/12/2019 6:32 PM, Ben Gorte wrote: > >>> Great, thanks! > >>> > >>> Greetings, > >>> Ben > >>> > >>> On Wed, 13 Nov 2019 at 02:54, Henry Rich <[email protected]> wrote: > >>> > >>>> Fixed for next release. The problem was that (x{M) created a > temporary > >>>> in-place noun to refer to atoms of M; this raised the usecount of M > >>>> rendering it uninplaceable for the amend (}). The in-place noun > should > >>>> have been released right after it was used, but erroneously it was not > >>>> released until the end of the sentence. > >>>> > >>>> The workaround is to do the fetch from M in a different sentence. And > do > >>>> try those forms that avoid boxing. > >>>> > >>>> Henry Rich > >>>> > >>>> On 11/12/2019 2:17 AM, Ben Gorte wrote: > >>>>> Dear J'ers > >>>>> > >>>>> I'm using large 3D arrays (voxels), such as > >>>>> M =: ?400 400 400$100 > >>>>> > >>>>> To add 1 to a bunch of voxels at positions > >>>>> > >>>>> I =: ?100 3$400 > >>>>> > >>>>> I go like: > >>>>> > >>>>> timespacex 'M =: (1+(;/I){M) (;/I) } M' > >>>>> > >>>>> 1.3e_5 42048 > >>>>> > >>>>> This was in version 8.07: > >>>>> > >>>>> JVERSION > >>>>> > >>>>> Engine: j807/j64/linux > >>>>> > >>>>> Release: commercial/2018-10-04T15:00:41 > >>>>> > >>>>> Library: 8.07.26 > >>>>> > >>>>> > >>>>> In version 9.01, however: timespacex 'M =: (1+(;/I){M) (;/I) } M' > >>>>> > >>>>> 0.238664 5.36912e8 > >>>>> > >>>>> > >>>>> It became thousands of times slower! I'm doing this hundreds of > >> thousands > >>>>> of times and it takes weeks instead of minutes. > >>>>> > >>>>> > >>>>> A multi-dimensional index for amend does not need to be boxed in > j901, > >>>> but: > >>>>> timespacex 'M =: (1+(;/I){M) I } M' > >>>>> > >>>>> 0.238302 5.36894e8 > >>>>> gives pretty much the same result. > >>>>> This is with: > >>>>> > >>>>> JVERSION > >>>>> > >>>>> Engine: j901/j64avx2/linux > >>>>> > >>>>> Beta-p: commercial/2019-11-06T09:48:25 > >>>>> > >>>>> Library: 9.01.10 > >>>>> > >>>>> I was wondering whether it happend in { or }, but to my great > surprise: > >>>>> timespacex 'new =: 1+(;/I) { M' > >>>>> > >>>>> 8e_6 21824 > >>>>> timespacex 'M =: new (;/I) } M' > >>>>> > >>>>> 6e_6 20992 > >>>>> > >>>>> So the solution is to do it in two steps !?!? > >>>>> > >>>>> With unboxed I in step 2, I get even: > >>>>> > >>>>> timespacex 'M =: new I } M' > >>>>> > >>>>> 2e_6 2560 > >>>>> > >>>>> > >>>>> Am I missing a point? Could I have foreseen this? > >>>>> > >>>>> Greetings, > >>>>> Ben > >>>>> > ---------------------------------------------------------------------- > >>>>> For information about J forums see > http://www.jsoftware.com/forums.htm > >>>> ---------------------------------------------------------------------- > >>>> For information about J forums see > http://www.jsoftware.com/forums.htm > >>>> > >>> ---------------------------------------------------------------------- > >>> For information about J forums see http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
