Solved, and fixed for next beta.
This is deep but I know Elijah likes it that way.
(7!:2 , 7!:2 , 7!:2 , 7!:2 , 7!:2 , 7!:2) 'b =: 1 (2 3 4)} b'
1408 1408 1408 1408 1073743328 1408
The problem is in the usecount of b. It starts at 1, as is fitting for
a value assigned to a name.
The first inner sentence executes an amend-in-place, but that execution
returns b as its result, and that gives b a usecount of 2 (one for the
stored b, one for the use of the value in a result). This result is
returned from the inner sentence and discarded by 7!:2 - but WITHOUT
DECREMENTING THE USECOUNT. (The decrement request is on a stack and
will not be lost, but it waits till the fork containing the first inner
sentence completes).
Thus, when the second 7!:2 is executed, the usecount of b is 2 and the
assignment is not inplace.
But... why isn't the pattern repeated, with the 3d assignment inplace
and the 4th not, etc?
Because when an inplaceable value is assigned to a name, as when the
second 7!:2 is executed, there is a special short path that decrements
the usecount immediately rather than marking it for later, to save a
little work. Thus, the usecount is 1 after all the subsequent assignments.
Henry Rich
On 10/21/2021 10:29 AM, Henry Rich wrote:
Wow, that's weird. I don't think it has to do with cache, because
only a tiny bit of the arguments are touched.
No, it has to do with inplacing:
b =: 1e9$0
(7!:2 , 7!:2) 'b =: 1 (2 3 4)} b'
1073743328 1408
(7!:2 , 7!:2 , 7!:2 , 7!:2 , 7!:2 , 7!:2) 'b =: 1 (2 3 4)} b'
1408 1408 1408 1408 1073743328 1408
(7!:2 , 7!:2 , 7!:2 , 7!:2 , 7!:2 , 6!:2) 'b =: 1 (2 3 4)} b'
1408 1408 1408 1408 1408 2.21e_5
(7!:2 , 7!:2 , 7!:2 , 7!:2 , 7!:2 , 0:@".) 'b =: 1 (2 3 4)} b'
1408 1408 1408 1408 1408 0
Something is making the second sentence not run inplace. I'll have to
look at that.
Henry Rich
On 10/21/2021 8:08 AM, Raul Miller wrote:
This looks like a cache liveness issue.
https://en.wikipedia.org/wiki/Cache_hierarchy#Multi-level_cache
I hope this makes sense,
--
This email has been checked for viruses by AVG.
https://www.avg.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm