On Wed, Jul 2, 2008 at 11:33 PM, Daryl Hammond <[EMAIL PROTECTED]> wrote:
>
> Thanks Alec for pointing out the incorrect prime count (I was failing
> to mark the
> last element in the array as non-prime).
>
> Michael, I divided the sieve program into three parts: create array,
> mark primes, and
> count primes.  I then ran the sieve program under sage-3.0.1 and
> sage-3.0.2.
> Here is a summary of the times in seconds and percent:
>
>  (seconds)     3.0.1    3.0.2          (percent)   3.0.1    3.0.2
> Create array    15.84    25.71        Create array    22       21
> Mark primes     38.08    69.22        Mark primes     53       56
> Count primes    17.62    28.96        Count primes    25       23
> ------------------------------------------------------------------
> Elapsed         71.55   123.89        Elapsed        100      100
>
> It looks like the GMP regression is effecting all parts of the program
> equally.

You might want to try typing

sage -i gmp-4.2.1.p14.spkg

to install the previous gmp version.  This will let us know if the
problem is definitely with GMP-4.2.1 itself or with something
we did to mess things up in the sage library.

> When looked at from a percentage basis, there isn't much difference
> in
> percentages among the three parts of the program when run under
> Sage-3.0.1 or
> Sage-3.0.2.
>
> Detailed timings and a revised sieve program follow:
>
> /home/daryl/sage-3.0.1/sage /home/daryl/UserData/sage/sieve.sage
>
> ============================================
> SAGE Version 3.0.1, Release Date: 2008-05-05
>
> Start time:       Thu Jul  3 00:31:35 2008
>
> Array size:       10000000
>
> Create array:     Thu Jul  3 00:31:51 2008
> Create seconds:   15.84
>
> Mark primes:      Thu Jul  3 00:32:29 2008
> Mark seconds:     38.08
>
> Count primes:     Thu Jul  3 00:32:46 2008
> Count seconds:    17.62
>
> Number of primes: 664579
>
> End time:         Thu Jul  3 00:32:46 2008
> Elapsed seconds:  71.55
>
> ============================================
>
> /home/daryl/sage-3.0.2/sage /home/daryl/UserData/sage/sieve.sage
>
> ============================================
> SAGE Version 3.0.2, Release Date: 2008-05-24
>
> Start time:       Thu Jul  3 00:32:49 2008
>
> Array size:       10000000
>
> Create array:     Thu Jul  3 00:33:15 2008
> Create seconds:   25.71
>
> Mark primes:      Thu Jul  3 00:34:24 2008
> Mark seconds:     69.22
>
> Count primes:     Thu Jul  3 00:34:53 2008
> Count seconds:    28.96
>
> Number of primes: 664579
>
> End time:         Thu Jul  3 00:34:53 2008
> Elapsed seconds:  123.89
>
> ============================================
>
> cat /home/daryl/UserData/sage/sieve.sage
> #!/usr/bin/env sage
>
> # sieve of Erasthenes
>
> # 2008/07/02 DWH Fix bug not processing last element in array
> # 2008/04/29 DWH Switch from numerical array to character array for
> primes;
> #                Switch from srange() to while loop.
> #
> #-------------------------------------------------------------------------------
>
> from time import *
>
> # print start time
>
> print
> print '============================================'
> print version()
> print
> start = time()
> print 'Start time:      ', ctime(start)
> print
>
> #create prime array p of size n and initialize to '1'
>
> n = 10 * 1000 * 1000
> print 'Array size:      ', n
> p = list()
> array_ctr = -1
> while array_ctr < n:
>    array_ctr = array_ctr + 1
>    p.append('1')
>
> create = time()
> print
> print 'Create array:    ', ctime(create)
> elapsed = create - start
> print 'Create seconds:  ', round(elapsed,2)
>
> #-----------------------------------------------
>
> # initialize first two array elements to '0'
>
> p[0] = '0'
> p[1] = '0'
>
> # assign '0' to non-prime numbers
>
> q = 1
> while q * q < n:
>    q = q + 1
>    if p[q] == '1':
>        z = q * q - q
>        while z + q <= n:
>            z = z + q
>            p[z] = '0'
>
> mark = time()
> print
> print 'Mark primes:     ', ctime(mark)
> elapsed = mark - create
> print 'Mark seconds:    ', round(elapsed,2)
>
> #-----------------------------------------------
>
> # count primes and print count
>
> ctr = 0
> array_ctr = -1
> while array_ctr < n:
>    array_ctr = array_ctr + 1
>    if p[array_ctr] == '1':
>        ctr = ctr + 1
>
> count = time()
> print
> print 'Count primes:    ', ctime(count)
> elapsed = count - mark
> print 'Count seconds:   ', round(elapsed,2)
>
> print
> print 'Number of primes:', ctr
>
> # print end time
>
> print
> end = time()
> print 'End time:        ', ctime(end)
> elapsed = end - start
> print 'Elapsed seconds: ', round(elapsed,2)
> print
> print '============================================'
> print
>
>
> >
>



-- 
William Stein
Associate Professor of Mathematics
University of Washington
http://wstein.org

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to