I see.

By the way, when I tried test1 and test3 on my machine, the latter is only 
about 10% faster than the former.

It should be easy to have a version in ATS that beats Haskell:

You first produce a non-linear thePrimes. Then you produce a linear 
thePrimes2 (where isPrime uses thePrimes).
In this way, the memory foot print should be very small. And I bet the 
running time is much faster. Try 2^28 or 2^30 :)

On Saturday, July 9, 2022 at 10:37:03 PM UTC-4 ice.r...@gmail.com wrote:

> I will check ATS3 version, meanwhile GHC 8.10 produces much more optimised 
> code:
>
> ```
> [nix-shell:/data/devel/mobt2/haskell]$ ghc --version
> The Glorious Glasgow Haskell Compilation System, version 8.10.7
> [nix-shell:/data/devel/mobt2/haskell]$ ghc -O2 --make app/Main.hs -o 
> haskell
> [1 of 1] Compiling Main             ( app/Main.hs, app/Main.o )
> Linking haskell ...
> [nix-shell:/data/devel/mobt2/haskell]$ $(which time) ./haskell
> 1077871
> 1.04user 0.00system 0:01.05elapsed 100%CPU (0avgtext+0avgdata 
> 72140maxresident)k
> 0inputs+0outputs (0major+17298minor)pagefaults 0swaps
> ```
> in comparison to ATS2 versions from repo above:
>
> ```
> [nix-shell:/data/devel/mobt2/ats2/src]$ make
> patscc -O2 -DATS_MEMALLOC_LIBC -I"../libs/" -o test3   TEST/test3.dats
> /run/current-system/sw/bin/time ./test3
> 1077871
> 1.11user 0.01system 0:01.12elapsed 100%CPU (0avgtext+0avgdata 
> 102456maxresident)k
> 0inputs+0outputs (0major+25327minor)pagefaults 0swaps
> patscc -O2 -DATS_MEMALLOC_LIBC -I"../libs/" -o test1   TEST/test1.dats
> /run/current-system/sw/bin/time ./test1
> 1077871
> 2.11user 0.03system 0:02.14elapsed 99%CPU (0avgtext+0avgdata 
> 203448maxresident)k
> 0inputs+0outputs (0major+50589minor)pagefaults 0swaps
> ```
> ie, non-linear version (test1) is twice slower and using 2x memory of 
> test3 (which converts stream into stream_vt). But still, haskell version is 
> faster and using less memory :)
>
> вс, 10 июл. 2022 г. в 02:21, gmhwxi <gmh...@gmail.com>:
>
>> Here is a version I wrote in ATS3:
>>
>>
>> https://github.com/githwxi/ATS-Xanadu/blob/master/xatslib/libcats/TEST/test02_isPrime.dats
>>
>> Currently, I can only compile the ATS3 code to JS. The generated JS code 
>> runs about 10 times slower
>> than the C code generated from compiling a comparable ATS2 implementation:
>>
>> |thePrimes2| = 1077871
>>
>> real    0m23.060s
>> user   0m23.380s
>> sys     0m0.188s
>> On Saturday, July 9, 2022 at 5:33:43 PM UTC-4 gmhwxi wrote:
>>
>>> I took a look. Your ATS code looks very fine to me.
>>>
>>> I did some profiling on my own. In my trials, your ATS code is actually 
>>> a lot faster than
>>> the Haskell code you posted. Note that my ghc version is very old: GHC 
>>> 7.10.3
>>>
>>> ###### ATS ######
>>>
>>> (* Your code using non-linear stream *)
>>> hwxi@hongwei-t440p:/tmp$ patscc -O2 -o primes -DATS_MEMALLOC_LIBC 
>>> primes.dats
>>> hwxi@hongwei-t440p:/tmp$ time ./primes    
>>> 1077871
>>>
>>> real    0m3.118s
>>> user    0m3.064s
>>> sys     0m0.048s
>>>
>>> ###### Haskell ######
>>> (* Your haskell version *)
>>> (*
>>> Glasgow Haskell Compiler, Version 7.10.3, stage 2 booted by GHC version 
>>> 7.10.3
>>> *)
>>>
>>> hwxi@hongwei-t440p:/tmp$ ghc -O2 primes.hs
>>> Linking primes ...
>>> hwxi@hongwei-t440p:/tmp$ time ./primes    
>>> 1077871
>>>
>>> real    0m8.195s
>>> user    0m8.152s
>>> sys     0m0.040s
>>>
>>> ################
>>>
>>> ###### ATS ######
>>> (*My version using linear stream that is based on yours*)
>>>
>>> hwxi@hongwei-t440p:/tmp$ patscc -O2 -o primes2 -DATS_MEMALLOC_LIBC 
>>> primes2.dats
>>> hwxi@hongwei-t440p:/tmp$ time ./primes2    
>>> 1077871
>>>
>>> real    0m2.120s
>>> user    0m2.092s
>>> sys     0m0.000s
>>>
>>> On Saturday, July 9, 2022 at 12:50:11 PM UTC-4 ice.r...@gmail.com wrote:
>>>
>>>> My initial motivation was this Haskell source code: 
>>>> https://github.com/dambaev/mobt2/blob/master/haskell/app/Main.hs which 
>>>> is using lazy list (of course) and recursive binding and I decided to 
>>>> check 
>>>> if it will be possible to get something similar
>>>>
>>>> ATS version using non-linear stream is here: 
>>>> https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test1.dats 
>>>> , but it takes to much memory as `stream_take_while` duplicates data, as I 
>>>> have got, that datatype constructor can't be unfolded with `@stream_cons` 
>>>> pattern match
>>>>
>>>> There is another version, that generates primes with non-linear stream 
>>>> and then, converting it to linear stream 
>>>> https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test3.dats 
>>>> . This is the closest version to haskell's one. but still is using more 
>>>> space and as twice as slow as Haskell, so I had started to think of how to 
>>>> eliminate intermediate data structure.
>>>>
>>>> So, not a production issue, hehe, just found an interesting topic to 
>>>> dig in :)
>>>>
>>>> сб, 9 июл. 2022 г. в 11:11, Hongwei Xi <gmh...@gmail.com>:
>>>>
>>>>> By looking at your first version, my simple answer is that a linear 
>>>>> stream cannot be used
>>>>> in this way. The second version is possible but I am not sure what you 
>>>>> wanted to do exactly.
>>>>> If you show me how to use a non-linear stream to do it, then I could 
>>>>> probably say more.
>>>>>
>>>>> On Sat, Jul 9, 2022 at 5:26 AM Dambaev Alexander <ice.r...@gmail.com> 
>>>>> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I had tried to implement function of type:
>>>>>>
>>>>>> ```
>>>>>> fun
>>>>>>   {a:t0p}
>>>>>>   isPrime
>>>>>>   ( xs: !stream_vt( int)
>>>>>>   , x: int
>>>>>>   ):<cloptr1>
>>>>>>   bool
>>>>>> ```
>>>>>>
>>>>>> Ie, I want to force evaluation of some portion of a stream, but I 
>>>>>> need to preserve it for a later use. 
>>>>>>
>>>>>> I had tried to make a similar version:
>>>>>> ```
>>>>>> fun
>>>>>>   {a:t0p}
>>>>>>   isPrime
>>>>>>   ( xs: stream_vt( int)
>>>>>>   , x: int
>>>>>>   ):<cloptr1>
>>>>>>   ( stream_vt( int), bool)
>>>>>> ```
>>>>>>
>>>>>> but failed as well, so I decided to ask for a direction if someone 
>>>>>> had tried to do similar stuff
>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "ats-lang-users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to ats-lang-user...@googlegroups.com.
>>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/ats-lang-users/CAHjn2KwFq7JH%2BiZE7bWCJ_L7oZ38K-kmGBFii7DZsdxWLDsGmg%40mail.gmail.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/ats-lang-users/CAHjn2KwFq7JH%2BiZE7bWCJ_L7oZ38K-kmGBFii7DZsdxWLDsGmg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "ats-lang-users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to ats-lang-user...@googlegroups.com.
>>>>>
>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLqp62MaoG8hugJ8h2mUt%2BsSAJ2eu6uRuJ%3D5nMOc4EbcfQ%40mail.gmail.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLqp62MaoG8hugJ8h2mUt%2BsSAJ2eu6uRuJ%3D5nMOc4EbcfQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ats-lang-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to ats-lang-user...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ats-lang-users/d87d273b-c937-40b8-ae6a-8846a9fbb801n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ats-lang-users/d87d273b-c937-40b8-ae6a-8846a9fbb801n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/69a5b6f5-69e9-48dd-9b1d-aa164f9b0566n%40googlegroups.com.

Reply via email to