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

Reply via email to