The times I previously posted were from a VirtualBox VM, limited to 4GB of ram, 
and in a "noisy" environment. The times here are derived from my host OS 
(PCLinuxOS) with full access to the system's 16GB of ram, in a "quiet" 
environment, i.e. I closed everything and rebooted, then just opened a terminal 
and ran the timing tests.
    
    
    [jzakiya@localhost nim]$ time ./ssozp5
    Enter integer number: 1_000_000_000
    segment has 262144 bytes and 262144 residues groups
    prime candidates = 266666665; resgroups = 33333334
    create nextp[8x3398] array
    perform segmented SoZ
    last segment = 41046 resgroups; segment slices = 128
    total primes = 50847534; last prime = 999999937
    
    real    0m6.928s
    user    0m0.393s
    sys     0m0.000s
    
    -----------------------------------------------------------
    [jzakiya@localhost nim]$ time ./ssozp5
    Enter integer number: 10_000_000_000
    segment has 262144 bytes and 262144 residues groups
    prime candidates = 2666666665; resgroups = 333333334
    create nextp[8x9589] array
    perform segmented SoZ
    last segment = 148310 resgroups; segment slices = 1272
    total primes = 455052511; last prime = 9999999967
    
    real    0m5.355s
    user    0m4.247s
    sys     0m0.000s
    
    -----------------------------------------------------------
    [jzakiya@localhost nim]$ time ./ssozp5
    Enter integer number: 100_000_000_000
    segment has 262144 bytes and 262144 residues groups
    prime candidates = 26666666665; resgroups = 3333333334
    create nextp[8x27290] array
    perform segmented SoZ
    last segment = 172374 resgroups; segment slices = 12716
    total primes = 4118054813; last prime = 99999999977
    
    real    0m48.434s
    user    0m46.852s
    sys     0m0.008s
    
    -----------------------------------------------------------
    [jzakiya@localhost nim]$ time ./ssozp5
    Enter integer number: 1_000_000_000_000
    segment has 262144 bytes and 262144 residues groups
    prime candidates = 266666666665; resgroups = 33333333334
    create nextp[8x78495] array
    perform segmented SoZ
    last segment = 150870 resgroups; segment slices = 127157
    total primes = 37607912018; last prime = 999999999989
    
    real    11m0.884s
    user    10m57.985s
    sys     0m0.010s
    

I also wanted to show that the math that forms the foundation of the Sieve of 
Zakiya (SoZ) reduces the number of prime candidates to sieve primes from as you 
use more "efficient" Strictly Prime (SP) generators. This makes the SoZ 
algorithmically possibly the fastest prime sieve.

To illustrate this, below are comparisons of the sequential SoZ between the P5 
and P7 prime generators. Because the P7 generator sieves through 8/30 (26.67%) 
of all integers, compared to 2/6 (33.33%) for P5, it greatly reduces the number 
of prime candidates it needs to sieve through than P5.

These versions just count the primes <= N, and don't numerate them into a list, 
to demonstrate the true performance of the prime sieve itself.

Again, these timings were derived on my host OS in a "quiet" environment, 
directly after rebooting.
    
    
    [jzakiya@localhost nim]$ time ./sozp5d
    Enter integer number: 1_000_000_000
    50847534
    
    real    0m12.074s
    user    0m3.738s
    sys     0m0.054s
    
    [jzakiya@localhost nim]$ time ./sozp7d
    Enter integer number: 1_000_000_000
    50847534
    
    real    0m6.938s
    user    0m3.055s
    sys     0m0.048s
    
    --------------------------------------------
    [jzakiya@localhost nim]$ time ./sozp5d
    Enter integer number: 10_000_000_000
    455052511
    
    real    0m43.221s
    user    0m40.365s
    sys     0m0.554s
    
    [jzakiya@localhost nim]$ time ./sozp7d
    Enter integer number: 10_000_000_000
    455052511
    
    real    0m38.520s
    user    0m35.655s
    sys     0m0.496s
    

Because the **"classical Sieve of Eratosthenes"** searches through the entire 
number space up to some N, it is always inherently slower than the SoZ method. 
The ways to increase its performance is to reduce the number space it sieves, 
by eliminating the even numbers (a 50% reduction of the number space) and 
applying various wheel and other reduction techniques to eliminate more of the 
sieved number space.

The SoZ inherently works on a reduced number space that can theoretically be 
made as small as desired by the choice of the prime generator used to perform 
the sieve.

The SoZ is also an inherently parallelizable algorithm, which can take 
advantage of multicore|threaded systems and CUDA|OpenMP implementations, and 
others with GPUs (graphic processing units). 

Reply via email to