I put my ATS2 code here:

https://github.com/githwxi/ATS-Postiats/tree/master/libats/TEST

I will put some code similar to what you did in test5 later. I think that 
test5-style
is going to be faster for a relative small input (e.g., 2^24) but it may 
not be able to
beat test02 for larger input (e.g., 2^30).


On Monday, July 11, 2022 at 8:46:02 AM UTC-4 gmhwxi wrote:

> There is 'qlist' in libats that does what you want.
>
> By using the two-stream approach I mentioned earlier, you can readily get 
> to 2^30:
>
> 54400028
> real    18m47.053s
> user    18m46.372s
> sys     0m0.424s
>
> (*
> This info is for the number of primes up to 2^28:
>
> ATS2:
> 14630843
> real    2m35.548s
> user    2m35.532s
> sys     0m0.000s
>
> Haskell (GHC-7.10.3)
> 14630843
> real    7m41.733s
> user    7m36.208s
> sys     0m1.688s
> *)
>
> I could not get the haskell implementation to finish for 2^30. I had to 
> stop its running once
> its memory usage reached 25% after about 10 minutes (I was monitoring 
> using 'top').
>
>
> On Mon, Jul 11, 2022 at 7:20 AM Dambaev Alexander <ice.r...@gmail.com> 
> wrote:
>
>> I had checked some more and was able to make a stateful numbers generator 
>> using list_vt for accumulating of evaluated results here 
>> https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test5.dats 
>> but for some reason, it takes forever to complete with default constraint 
>> <= g0int_npow( 2, 24) using linear streams
>>
>> I guess is due to list_vt_extent, which is O(n)
>>
>> I was trying to pass pointer to a tail of the list_vt data to pass 
>> through auxmain/auxmain_con to make extend to be O(1), but I was not able 
>> to satisfy type checker :) So I decided to ask if it is possible to use 
>> such pointer/hole to the tail in the environment of $ldelay?
>>
>> вс, 10 июл. 2022 г. в 03:12, gmhwxi <gmh...@gmail.com>:
>>
>>>
>>> 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-user...@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
>>>  
>>> <https://groups.google.com/d/msgid/ats-lang-users/69a5b6f5-69e9-48dd-9b1d-aa164f9b0566n%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-user...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ats-lang-users/CAHjn2Ky0URPmxCYFYQeT64KqcTxcLnRw7e4W0LKS8CAkqcdsjw%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/ats-lang-users/CAHjn2Ky0URPmxCYFYQeT64KqcTxcLnRw7e4W0LKS8CAkqcdsjw%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-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/14f3697b-b90c-4c7a-9b14-c70e7205ed75n%40googlegroups.com.

Reply via email to