Linear time IntSet / IntMap construction from sorted input

Scott Dillard sedillard at ucdavis.edu
Wed May 21 16:20:10 EDT 2008


I got an off-list response from Bertram Felgenhauer, and he made some
improvements to my code. I've attached a new patch -- disregard the
old one.

Here are the timings on my 2Ghz Core Duo, for the program

main = print . IS.fold (+) 0 . IS.fromList $ [i-n|i<-[1..2*n]] where n = 5000000

original:
2,820,354,288 bytes allocated in the heap
647,827,824 bytes copied during GC (scavenged)
250,183,416 bytes copied during GC (not scavenged)
158,851,072 bytes maximum residency (9 sample(s))
       5325 collections in generation 0 (  1.53s)
          9 collections in generation 1 (  1.14s)
        315 Mb total memory in use
  INIT  time    0.00s  (  0.00s elapsed)
  MUT   time    2.52s  (  2.50s elapsed)
  GC    time    2.67s  (  2.97s elapsed)
  EXIT  time    0.00s  (  0.00s elapsed)
  Total time    5.19s  (  5.47s elapsed)
  %GC time      51.4%  (54.3% elapsed)
  Alloc rate    1,117,350,788 bytes per MUT second
  Productivity  48.6% of total user, 46.1% of total elapsed


new function:
1,168,348,000 bytes allocated in the heap
682,569,432 bytes copied during GC (scavenged)
264,208,568 bytes copied during GC (not scavenged)
184,315,904 bytes maximum residency (9 sample(s))
       2174 collections in generation 0 (  1.57s)
          9 collections in generation 1 (  1.05s)
        355 Mb total memory in use
  INIT  time    0.00s  (  0.00s elapsed)
  MUT   time    1.01s  (  1.02s elapsed)
  GC    time    2.62s  (  2.91s elapsed)
  EXIT  time    0.00s  (  0.00s elapsed)
  Total time    3.63s  (  3.93s elapsed)
  %GC time      72.1%  (73.9% elapsed)
  Alloc rate    1,154,423,345 bytes per MUT second
  Productivity  27.9% of total user, 25.7% of total elapsed

How many times can I reply to myself before I'm banned from the list? :)




On Tue, May 20, 2008 at 5:24 PM, Scott Dillard <sedillard at ucdavis.edu> wrote:
> I've gone ahead and made a patch, which is attached. I don't have
> access to the full test suite, but it passes the QuickCheck test for
> just the prop_Ordered property, which is no longer a tautology. Who
> wrote that test anyway? :)
>
> Scott
>
>
> On Mon, May 19, 2008 at 5:43 PM, Scott Dillard <sedillard at ucdavis.edu> wrote:
>> Hi,
>>
>> It's always bugged me that IntSet.fromAscList is an alias for
>> fromList, which is basically (foldr insert), even though a sorted list
>> is (almost) already in tree order. Is there a reason for this? Or was
>> it just that fromList is good enough? (which it is.)
>>
>> Assuming the latter, and somewhat bored, I wrote a function to build
>> an IntSet from sorted input in linear time. This goes in
>> Data.IntSet.hs :
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fromAscList_BF.patch
Type: text/x-diff
Size: 71654 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/libraries/attachments/20080521/b727db1a/fromAscList_BF-0001.bin


More information about the Libraries mailing list