Hi Jürgen,

> I believe some of the measurements look different now.

I just ran PRIMES←SIEVE 100000 on my Optiplex, twice under SVN 662 and
twice under SVN 663.  This is a 64 bit Cygwin Windows 10 box with a 2.93
ghz Core 2 Duo.

I got 212.258 and 212.665 seconds for SVN 662.

I got 210.425 and 212.35 seconds for SVN 663.

So maybe faster by epsilon. :)

I notice there is now a ^M character in buildtag.hh which needs to be
edited out in order for GNU APL to compile, at least on this platform.

Regards,

Mike


On Fri, Aug 28, 2015 at 8:18 AM, Juergen Sauermann <
[email protected]> wrote:

> Hi,
>
> I have changed the reduction operator  to use to_value() only i
> neccessary. *SVN 663*.
> I believe some of the measurements look different now.
>
> /// Jürgen
>
>
> On 08/28/2015 02:51 PM, Elias Mårtenson wrote:
>
> In this particular case, the performance would be doubled if the copying
> was eliminated. If that is done, along with an optimisation of the
> reduction operators, you would see at least a 10× improvement.
>
> In my previous tests I even higher improvements (100× or so) for specific
> cases. Unfortunately my copy-on-write algorithm didn't actually work
> properly so it needed to be rolled back. The potential is there, however.
>
> Regards, Elias
> On 28 Aug 2015 20:46, "Mike Duvos" <[email protected]> wrote:
>
>> Hi Elias,
>>
>> That's very interesting.
>>
>> How fast do you think GNU APL could be made if the gratuitous array
>> copying were completely eliminated?  I'm guessing it's always going to be
>> more of an educational tool than a competitor to expensive commercial APL
>> systems, which special case everything by type and rank, and do extensive
>> idiom recognition.
>>
>> Regards,
>>
>> Mike
>>
>>
>>
>> On Thu, Aug 27, 2015 at 11:54 PM, Elias Mårtenson <[email protected]>
>> wrote:
>>
>>> Thanks. I've run the test case with Callgrind now (it took over 3
>>> hours).
>>>
>>> Like the previous test, we see that the reduce operator takes an
>>> excessive amount of time. Specifically, the call to Prefix::reduce_A_F_B()
>>> was called 67157 times and took 50% CPU time, of which 30% of the total
>>> time (i.e. 60% of the reduction) was doing the ⍴-reduction and 11.5% was
>>> doing a ↑-reduction.
>>>
>>> Out of the other half of processing time, 47.24% was spent doing
>>> 6210421621 calls to Cell::init(). This was mostly caused by 105552 calls to
>>> Value::clone(), creating what I believe is mostly unnecessary copies of the
>>> an array with an average of 6210421621/105552≈59000 elements.
>>>
>>> Regards,
>>> Elias
>>>
>>>
>>> On 28 August 2015 at 10:49, Mike Duvos <[email protected]> wrote:
>>>
>>>> Hi Elias,
>>>>
>>>>       )IN PRIMESATF
>>>>
>>>> Should load PRIMESATF.atf.  You need to have it in your workspaces
>>>> directory.  You can see where that is with )LIBS
>>>>
>>>> Regards,
>>>>
>>>> Mike
>>>>
>>>>
>>>>
>>>> On Thu, Aug 27, 2015 at 7:45 PM, Elias Mårtenson <[email protected]>
>>>> wrote:
>>>>
>>>>> I have never used an ATF file, how do I load them?
>>>>>
>>>>> Generally, I just edit my APL files as plain .apl files. Makes the
>>>>> Emacs navigate-to-definition easy to use too.
>>>>>
>>>>> Regards,
>>>>> Elias
>>>>>
>>>>> On 28 August 2015 at 10:42, Mike Duvos <[email protected]> wrote:
>>>>>
>>>>>> Hi Elias,
>>>>>>
>>>>>> I am apparently still having problems with pasting Unicode dropping
>>>>>> less than or equal to and greater than or equal to.  I've attached the 
>>>>>> .atf
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Mike
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Aug 27, 2015 at 7:37 PM, Elias Mårtenson <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> I wanted to test this thing myself, but I'm getting this error when
>>>>>>> testing it:
>>>>>>>
>>>>>>> *      TIME 'PRIMES←SIEVE 100000'*
>>>>>>> DOMAIN ERROR
>>>>>>> SIEVE[3]  →((⍴B)P←B⍳1)/L2
>>>>>>>            ^           ^
>>>>>>>
>>>>>>> Regards,
>>>>>>> Elias
>>>>>>>
>>>>>>> On 28 August 2015 at 10:30, Mike Duvos <[email protected]> wrote:
>>>>>>>
>>>>>>>> Here is a function that finds all the Primes less than N, by
>>>>>>>> clearing bits in a boolean vector.
>>>>>>>>
>>>>>>>>       )CLEAR
>>>>>>>> CLEAR WS
>>>>>>>>
>>>>>>>>      ⎕IO←0
>>>>>>>>
>>>>>>>>     ∇
>>>>>>>> [0]   Z←SIEVE N;B;K;P
>>>>>>>> [1]   Z←B←0 0,(¯2+N)⍴0=K←0
>>>>>>>> [2]  L1:→((⍴B)P←B⍳1)/L2
>>>>>>>> [3]   B←B∧(⍴B)⍴∼P↑1
>>>>>>>> [4]   Z[K]←P◊K←K+1
>>>>>>>> [5]   →L1
>>>>>>>> [6]  L2:Z←K↑Z
>>>>>>>>     ∇
>>>>>>>>
>>>>>>>> And our timing function, which we have used previously.
>>>>>>>>
>>>>>>>>     ∇
>>>>>>>> [0]   TIME X;TS
>>>>>>>> [1]   TS←⎕TS
>>>>>>>> [2]   ⍎X
>>>>>>>> [3]   (⍕(24 60 60 1000⊥¯4↑⎕TS-TS)÷1000),' Seconds.'
>>>>>>>>     ∇
>>>>>>>>
>>>>>>>> [IBM APL2]
>>>>>>>>
>>>>>>>>       TIME 'PRIMES←SIEVE 100000'
>>>>>>>> 1.865 Seconds.
>>>>>>>>
>>>>>>>> [GNU APL]
>>>>>>>>
>>>>>>>>       TIME 'PRIMES←SIEVE 100000'
>>>>>>>> 132.056 Seconds.
>>>>>>>>
>>>>>>>>       10 10⍴PRIMES
>>>>>>>>   2   3   5   7  11  13  17  19  23  29
>>>>>>>>  31  37  41  43  47  53  59  61  67  71
>>>>>>>>  73  79  83  89  97 101 103 107 109 113
>>>>>>>> 127 131 137 139 149 151 157 163 167 173
>>>>>>>> 179 181 191 193 197 199 211 223 227 229
>>>>>>>> 233 239 241 251 257 263 269 271 277 281
>>>>>>>> 283 293 307 311 313 317 331 337 347 349
>>>>>>>> 353 359 367 373 379 383 389 397 401 409
>>>>>>>> 419 421 431 433 439 443 449 457 461 463
>>>>>>>> 467 479 487 491 499 503 509 521 523 541
>>>>>>>>
>>>>>>>>       10 10 ⍴¯100↑PRIMES
>>>>>>>> 98897 98899 98909 98911 98927 98929 98939 98947 98953 98963
>>>>>>>> 98981 98993 98999 99013 99017 99023 99041 99053 99079 99083
>>>>>>>> 99089 99103 99109 99119 99131 99133 99137 99139 99149 99173
>>>>>>>> 99181 99191 99223 99233 99241 99251 99257 99259 99277 99289
>>>>>>>> 99317 99347 99349 99367 99371 99377 99391 99397 99401 99409
>>>>>>>> 99431 99439 99469 99487 99497 99523 99527 99529 99551 99559
>>>>>>>> 99563 99571 99577 99581 99607 99611 99623 99643 99661 99667
>>>>>>>> 99679 99689 99707 99709 99713 99719 99721 99733 99761 99767
>>>>>>>> 99787 99793 99809 99817 99823 99829 99833 99839 99859 99871
>>>>>>>> 99877 99881 99901 99907 99923 99929 99961 99971 99989 99991
>>>>>>>>
>>>>>>>> So on that function, GNU APL is 70.807 times as slow as APL2, so
>>>>>>>> obviously some performance issues remain.
>>>>>>>>
>>>>>>>> Function PD returns a list of the primes not greater than the
>>>>>>>> square root of a number which divide it evenly.  If there are none, the
>>>>>>>> number is prime, and it returns the number.  FACTOR calls PD 
>>>>>>>> repeatedly to
>>>>>>>> get the full prime factorization of its argument.   FFMT factors a 
>>>>>>>> list of
>>>>>>>> numbers, and returns the numbers and their factorizations printed out
>>>>>>>> neatly.
>>>>>>>>
>>>>>>>>     ∇
>>>>>>>> [0]   Z←PD X;Q
>>>>>>>> [1]   →(0≠⍴Z←(Q=⌊Q←X÷Z)/Z←(PRIMES⌈X⋆0.5)/PRIMES)/0
>>>>>>>> [2]   Z←,X
>>>>>>>>     ∇
>>>>>>>>
>>>>>>>>     ∇
>>>>>>>> [0]   Z←FACTOR X;Q
>>>>>>>> [1]   Z←''
>>>>>>>> [2]  L1:→(1=Q←⌊X÷×/Z)/L2
>>>>>>>> [3]   Z←Z,PD Q
>>>>>>>> [4]   →L1
>>>>>>>> [5]  L2:Z←Z[⍋Z]
>>>>>>>>     ∇
>>>>>>>>
>>>>>>>>     ∇
>>>>>>>> [0]   Z←FFMT X
>>>>>>>> [1]   Z←FACTOR¨X←,X
>>>>>>>> [2]   Z←(((⍴X),1)⍴X),Z
>>>>>>>> [3]   Z←('Number' 'Prime Factorization'),[0]Z
>>>>>>>> [4]
>>>>>>>>     ∇
>>>>>>>>
>>>>>>>> Now lets get some random data, being careful to call Roll and not
>>>>>>>> the system-destroying Deal.
>>>>>>>>
>>>>>>>>       4 5⍴DATA←?20⍴¯1+2*31
>>>>>>>> 1979327593 1319354819 771200257 1811210650  789012101
>>>>>>>> 1029042612  152268513  20570707  832781767  898376923
>>>>>>>> 1725231712  117387147 931909676  752862863 1800558041
>>>>>>>>  736032325  151634070 731135336 1798144557 1223769030
>>>>>>>>
>>>>>>>>       FFMT DATA
>>>>>>>>      Number  Prime Factorization
>>>>>>>>  1979327593  14747 134219
>>>>>>>>  1319354819  17 23 101 33409
>>>>>>>>   771200257  17 17 1117 2389
>>>>>>>>  1811210650  2 5 5 31 1168523
>>>>>>>>   789012101  101 7812001
>>>>>>>>  1029042612  2 2 3 3 13 29 75821
>>>>>>>>   152268513  3 137 370483
>>>>>>>>    20570707  20570707
>>>>>>>>   832781767  47 199 269 331
>>>>>>>>   898376923  898376923
>>>>>>>>  1725231712  2 2 2 2 2 53913491
>>>>>>>>   117387147  3 23 1701263
>>>>>>>>   931909676  2 2 23 23 37 11903
>>>>>>>>   752862863  752862863
>>>>>>>>  1800558041  6841 263201
>>>>>>>>   736032325  5 5 7 29 145031
>>>>>>>>   151634070  2 3 3 5 7 233 1033
>>>>>>>>   731135336  2 2 2 7247 12611
>>>>>>>>  1798144557  3 11 1667 32687
>>>>>>>>  1223769030  2 3 5 11 1471 2521
>>>>>>>>
>>>>>>>> That ran in a reasonable amount of time.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to