PRPLL NTT now supports both CUDA and OpenCL

For the Great Internet Mersenne Prime Seach (GIMPS) (https://www.mersenne.org), PRPLL NTT now supports CUDA in addition to OpenCL for primality testing using either FP64 FFT or integer NTT.

Special thanks to Mersenne Forum user “Sherpa”, who shared their source code for translating OpenCL into CUDA code at the link below.

https://github.com/shitcoinsherpa/Frey-PRPLL

George Woltman just provided the first official release of a CUDA version of PRPLL.

Current versions:

Linux OpenCL: https://www.dropbox.com/scl/fi/o22fl…lhcbpx225&dl=0
Linux CUDA: https://www.dropbox.com/scl/fi/o35sl…c8sg87q0h&dl=0
Windows OpenCL: https://www.dropbox.com/scl/fi/04uef…y2r7jfh42&dl=0
Windows CUDA: https://www.dropbox.com/scl/fi/l5pyn…mbx0crmax&dl=0
Windows CUDA static-linked: https://www.dropbox.com/scl/fi/3rvda…qtixk2xed&dl=0

https://github.com/gwoltman/gpuowl

The GIMPS largest prime number project is going great with this optimized CUDA / OpenCL software.

Feel free to join: follow instructions shown in Setup Wizard for PRPLL NTT section:

https://download.mersenne.ca/mirror/AutoPrimeNet/quick-start-guide.html

Some sample timings for Mersenne Prime 136279841:

NVIDIA RTX PRO 6000 Blackwell Server Edition

Integer NTT

180 microseconds per iteration

RTX 5090

Integer NTT

185 microseconds per iteration

NVIDIA H100 80GB HBM3

FP64 FFT

196 microseconds per iteration

NVIDIA A100-SXM4-40GB

FP64 FFT

378 microseconds per iteration

RTX 4060

Integer NTT

1365 microseconds per iteration

New faster versions of PRPLL NTT just released:

Iteration times for the latest August 22 version of PRPLL NTT are shown below.

My fuzzy math (which could be wrong) and Nvidia Insight Compute seem to both show for H100 for smaller Mersenne Prime 74207281 that its 82.5 microseconds per iteration using 4M FP64 FFT and fitting entirely in L2 cache is hitting 3 TeraBytes per second of L2 cache bandwidth in that scenario – pretty impressive :)

Testing Mersenne Prime 136279841 using August 22 version of PRPLL NTT

NVIDIA RTX PRO 6000 Blackwell Server Edition:

M61+M31 Integer NTT (type 1)
156.1 microseconds per iteration

FP64 FFT (type 0 / no prefix)
849.6 microseconds per iteration

NVIDIA H100 80GB HBM3:

FP64+M31 Hybrid FFT (type 51)
182.0 microseconds per iteration

FP64 FFT (type 0 / no prefix)
192.6 microseconds per iteration

M61+M31 Integer NTT (type 1)
250.1 microseconds per iteration

NVIDIA A100-SXM4-40GB:

FP64+M31 Hybrid FFT (type 51)
331.5 microseconds per iteration

FP64 FFT (type 0 / no prefix)
381.4 microseconds per iteration

M61+M31 Integer NTT (type 1)
464.2 microseconds per iteration

RTX_PRO_6000_CUDA_NTT_gpuowl-0.log (10.6 KB)

A100_CUDA_NTT_gpuowl-0.log (16.3 KB)

H100_CUDA_FP64_customized_512_8_512_tune_gpuowl-0.log (7.4 KB)

H100_CUDA_FP64_gpuowl-0.log (27.7 KB)

H100_CUDA_NTT_gpuowl-0.log (19.8 KB)

RTX_PRO_6000_FP64_CUDA_gpuowl-0.log (8.3 KB)

A100_OpenCL_FP64_gpuowl-0.log (1.2 KB)

New faster October 9 versions of PRPLL NTT here:

https://download.mersenne.ca/PRPLL-NTT/2026-10-09

George Woltman and team have done an amazing job using Claude to optimize PRPLL NTT a lot.

The software supports the following:

type 0: FP64 FFT
type 1: M31+M61 Integer NTT
type 2: FP32+M61 Hybrid FFT
type 3: M61 Integer NTT
type 4: FP32+M31+M61 Hybrid FFT
type 51: FP64+M31 Hybrid FFT

Some sample timings testing Mersenne Prime 136279841:

NVIDIA RTX PRO 6000 Blackwell Server Edition
124.9 microseconds per iteration (FFT: 4M 2:512:8:512:202 (32.49 bpw))

RTX 5090
135 microseconds per iteration (FFT: 4M 2:512:8:512:202 (32.49 bpw))

RTX 4070 Ti Super
325 microseconds per iteration (FFT: 3.50M 1:512:7:512:202 (37.13 bpw))

RTX 4060
1071 microseconds per iteration (FFT: 2.75M 4:256:11:512:202 (47.26 bpw))