Fastest Prime Sieve, in D
Jabari Zakiya
jzakiya at gmail.com
Sat Jun 29 12:28:35 UTC 2019
On Friday, 28 June 2019 at 19:32:41 UTC, Jabari Zakiya wrote:
> This is a continuation of a previous thread on the Segmented
> Sieve of Zakiya (SSoZ):
>
> https://forum.dlang.org/post/ozwapetxgcxkbzjjslqe@forum.dlang.org
>
> to present the D version of the current state-of-art of the
> work.
>
> The D version source code also performs the Fastest Primes
> Sieve for Twin Primes.
>
> https://gist.github.com/jzakiya/ae93bfa03dbc8b25ccc7f97ff8ad0f61
>
> It's a direct translation of the (original) Nim
> (www.nim-lang.org) version.
>
> https://gist.github.com/jzakiya/6c7e1868bd749a6b1add62e3e3b2341e
>
> For those interested, here are two places to get my current
> paper on it.
> I need to update it (again) to incorporate this new algorithm,
> and results.
>
> https://www.academia.edu/37952623/The_Use_of_Prime_Generators_to_Implement_Fast_Twin_Primes_Sieve_of_Zakiya_SoZ_Applications_to_Number_Theory_and_Implications_for_the_Riemann_Hypotheses
>
> https://www.scribd.com/document/395415391/The-Use-of-Prime-Generators-to-Implement-Fast-Twin-Primes-Sieve-Of-Zakiya-SoZ-Applications-to-Number-Theory-and-Implications-for-the-Riemann-Hypoth
>
> I compiled the D source using the latest LDC 1.16.0. When
> comparing times to Nim it's comparable but becomes slower as
> inputs sizes increase. Here are some times for the Nim version
> compared to `primesieve` --
> https://github.com/kimwalisch/primesieve
>
> ```
> ➜ ~ inxi -SCM
> System: Host: localhost.localdomain Kernel: 5.1.11-pclos1
> x86_64 bits: 64 Desktop: KDE Plasma 5.16.1 Distro: PCLinuxOS
> 2019
> Machine: Type: Laptop System: System76 product: Gazelle v:
> gaze10 serial: <root required>
> Mobo: System76 model: Gazelle v: gaze10 serial:
> <root required> UEFI [Legacy]: American Megatrends v: 1.05.08
> date: 03/31/2016
> CPU: Topology: Quad Core model: Intel Core i7-6700HQ
> bits: 64 type: MT MCP L2 cache: 6144 KiB
> Speed: 1185 MHz min/max: 800/3500 MHz Core speeds
> (MHz): 1: 800 2: 800 3: 800 4: 800 5: 800 6: 800 7: 800 8: 800
> ```
>
> ```
> N | twinprimes_ssoz | primesieve |
> Ratio |
>
> -------------------|-----------------|---------------|-------|
> 100_000_000_000 | 4.628 | 5.837 |
> 1.26 |
> 500_000_000_000 | 23.308 | 32.765 |
> 1.41 |
> 1_000_000_000_000 | 47.966 | 69.705 |
> 1.45 |
> 5_000_000_000_000 | 265.746 | 388.233 |
> 1.46 |
> 10_000_000_000_000 | 572.803 | 821.755 |
> 1.43 |
> 50_000_000_000_000 | 3004.487 | 4620.525 |
> 1.54 |
> 100_000_000_000_000 | 6307.521 | 9724.568 |
> 1.54 |
> 200_000_000_000_000 | 13603.531 | 20279.547 |
> 1.49 |
> ```
> I'm hoping people can help improve it and make it faster than
> it currently is.
>
> Thanks.
>
> Jabari
Timing comparisons on my system. Nim code compiled with GCC 8.3.1
(system has LLVM 8.0.0).
```
N | Nim | D | Ratio |
-------------------|-----------------|---------------|-------|
100_000_000_000 | 4.628 | 4.619 | 1.00 |
500_000_000_000 | 23.308 | 24.071 | 1.03 |
1_000_000_000_000 | 47.966 | 49.703 | 1.04 |
5_000_000_000_000 | 265.746 | 276.847 | 1.04 |
10_000_000_000_000 | 572.803 | 590.881 | 1.03 |
50_000_000_000_000 | 3009.485 | 3046.913 | 1.01 |
100_000_000_000_000 | 6307.521 | 6594.283 | 1.04 |
200_000_000_000_000 | 13603.531 | 14706.743 | 1.08 |
```
More information about the Digitalmars-d
mailing list