Thanks Henry,
I have increased argument sizes and defined using tacit. I am still not seeing
results that suggest the differences in the two approaches. Feel free to ignore
if I am just running down a rabbit hole, but if it is useful here are my
results.
JVERSION
Engine: j902/j64avx2/darwin
Beta-e: commercial/2020-08-14T13:00:52
Library: 9.02.05
Qt IDE: 1.8.7/5.12.7(5.12.7)
Platform: Darwin 64
Installer: J902 install
InstallPath: /users/bobtherriault/j902
Contact: www.jsoftware.com
operand =. 2 2 2 $ 3 2 2 3 2 3 3 2 NB. original arguments
bitmask =. 2 2 2 $ 1 0 0 1 0 1 1 0
roger =: 0&(] >:)"0 NB. tacit definitions
henry =: >:@]^:["0
bitmask roger operand
4 2
2 4
2 4
4 2
bitmask henry operand
4 2
2 4
2 4
4 2
10 timespacex 'bitmask roger operand'
7e_7 1792
10 timespacex 'bitmask henry operand'
8e_7 1792
operand1 =. 200 200 200 $ 3 2 2 3 2 3 3 2 NB. larger arguments
bitmask1 =. 200 200 200 $ 1 0 0 1 0 1 1 0
10 timespacex 'bitmask1 roger operand1'
0.342831 6.71104e7
10 timespacex 'bitmask1 henry operand1'
0.332431 6.71104e7
operand2 =. 2000 2000 200 $ 3 2 2 3 2 3 3 2 NB. even larger arguments
bitmask2 =. 2000 2000 200 $ 1 0 0 1 0 1 1 0
timespacex 'bitmask2 roger operand2' NB. run only once because of
time required to calculate
36.86 8.58994e9
timespacex 'bitmask2 henry operand2'
35.5014 8.58994e9
Cheers, bob
> On Aug 17, 2020, at 07:54, Henry Rich <[email protected]> wrote:
>
> With arguments that small, most of the time is spent in lexing and parsing.
> To test the time of execution, you need arguments long enough that the
> execution dominates. Or, you can make a tacit verb that has done the parsing
> in advance.
>
> To get serious measurements you need to delay the sampling until the process
> has been CPU-bound long enough for the OS to change its scheduling mode from
> interactive to batch.
>
> Henry Rich
>
>
>
>
>
> On 8/17/2020 10:45 AM, 'robert therriault' via Programming wrote:
>> Thanks Henry,
>>
>> I woke up this morning realizing that the argument to & could be any value
>> and that cleared up a lot of my fuzziness on what was going on. Thank you to
>> Pascal as well for the explanation and Roger for twisting my brain for a few
>> hours.
>>
>> operand =. 2 2 2 $ 3 2 2 3 2 3 3 2
>>
>> bitmask =. 2 2 2 $ 1 0 0 1 0 1 1 0
>>
>> operator =. >:
>>
>> bitmask 0&(] operator) operand NB. original
>> 4 3
>> 3 4
>>
>> 3 4
>> 4 3
>> bitmask 10&(] operator) operand NB. 10& same result
>> 4 3
>> 3 4
>>
>> 3 4
>> 4 3
>> bitmask ' '&(] operator) operand NB. type is not even important - ' '&
>> works
>> 4 3
>> 3 4
>>
>> 3 4
>> 4 3
>>
>> For efficiency, I don't see much difference between the two with these
>> particular values
>> 1000 timespacex ' bitmask 0&(] operator)"0 operand'
>> 1.013e_6 2816
>> 1000 timespacex 'bitmask (operator@]^:[)"0 operand'
>> 9.38e_7 2816
>>
>> But the much simpler addition of the bitmask to the operand is 3 times
>> faster and takes up half the space.
>> 1000 timespacex 'bitmask + operand'
>> 3.14e_7 1408
>>
>> bitmask + operand
>> 4 2
>> 2 4
>>
>> 2 4
>> 4 2
>>
>> Cheers, bob
>>
>>
>>> On Aug 17, 2020, at 07:20, Henry Rich <[email protected]> wrote:
>>>
>>> In the example above, the 0& could be any value and is used only as a way
>>> of getting the power function.
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
> --
> 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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm