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

Reply via email to