Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 23 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,34 @@ PRPLL implements two primality tests for Mersenne numbers: PRP ("PRobable Prime"

PRPLL is an OpenCL (GPU) program for primality testing Mersenne numbers.


## Build

Invoke `make` in the source directory.
Multi-threaded build (`make -j$(nproc)`) is supported for the impatient.

## Pre-built binaries

You can get pre-built binaries from [nightly.link](https://nightly.link/preda/gpuowl/workflows/ci/master). This is identical to going to the "Actions" tab on GitHub, choosing the latest commit, then to section "Artifacts".

## Use

See `prpll -h` for the command line options.

You may want to copy the `tune.txt` found in project root directory alongside the `prpll` binary.
Alternatively you may want to run `prpll -tune` to generate your own.

## Why LL
`prpll` may have additional dependencies. If you don't have them, the program will not launch.
On Linux and MSYS2 (Windows), you can use `ldd` to list what libraries it requires and that you may be missing.
On macOS `otool -L` can be used.

## Work types supported

For Mersenne primes search, the PRP test is by far preferred over LL, such that LL is not used anymore for search.
But LL is still used to verify a prime found by PRP (which is a very rare occurence).
This is because there is a simple way to verify the results of a PRP computation, unlike LL which is verified by full recomputation.
But PRP does not definitely confirm a number as prime, so LL is still used to verify a probable prime found by PRP (which is a very
rare occurence).

PRPLL supports LL, PRP, and CERT jobs.

### Lucas-Lehmer (LL)
This is a test that proves whether a Mersenne number is prime or not, but without providing a factor in the case where it is not prime.
Expand All @@ -54,3 +67,10 @@ prime is extremely small for large Mersenne candidates.

The PRP test is very similar computationally to LL: PRP iterates f(x) = x^2 modulo M(p) starting from 3. If after p iterations the result is 9 modulo M(p), then M(p) is probably prime, otherwise M(p) is certainly not prime. The cost
of PRP is exactly the same as LL.

The PRP test also generates a proof file based on the Pietrzak VDF scheme authenticating the calculation leading to the reported
residue. This file is meant to be uploaded to PrimeNet alongside the JSON result output.

### CERT
PrimeNet hands out work containing other people's cert files to trusted computers. These computers verify the Pietrzak proof of the
modular exponentiation process. PRPLL is able to process CERT work since October 2024 (version TO_BE_RELEASED).