Primesieve Changelog

What's new in Primesieve 5.5

Nov 10, 2015
  • This release contains many small incremental improvements. There are 2 minor backwards incompatible API changes which are described further down:
  • primesieve GUI app: Runtime detection of CPU L1 cache size.
  • primesieve.pc.in: Added support for pkg-config.
  • appveyor.yml: Automated Windows (MSVC++) testing.
  • README.md: New "Bindings for other languages" section.
  • include/config.h: tune for Intel Skylake CPUs.
  • include/WheelFactorization.hpp: Slightly faster initialization.
  • src/primesieve/EratMedium.cpp: Unroll sieving loop, up to 5% speed up.
  • src/primesieve/popcount.cpp: Faster popcount algorithm.
  • examples/c/previous_prime.c: Shows how to use primesieve_previous_prime().
  • C++ API changes:
  • primesieve::test() has been renamed to primesieve::primesieve_test() in order to prevent naming collisions.
  • primesieve::iterator::previous_prime() now returns 0 if input

New in Primesieve 5.4 (Sep 18, 2014)

  • Fixed two bugs in the computation of prime k-tuplets.

New in Primesieve 5.3 (Jul 8, 2014)

  • Fix use of uninitialized variable bug in primesieve::iterator: https://github.com/kimwalisch/primesieve/commit/006d572ea8fa4958eaf46c1db24c983b1ce27e1b
  • README.md update: Explain how to build from master-branch.
  • New file HACKING.md: Explains source tree, useful for developers.

New in Primesieve 5.2 (Apr 15, 2014)

  • Added backwards nth prime search, if n < 0 primesieve::nth_prime(int64_t n, uint64_t start); will find the nth prime < start.
  • Faster nth prime implementation, more accurate guessing of the nth prime gives up to 20% speed up if n < 10^8.
  • Added continuous integration testing with Travis (travis-ci.org), files: .travis.yml, Readme.md (shows build status).

New in Primesieve 5.1 (Feb 15, 2014)

  • and are now compatible with , fixed CALLBACK and max() issues.
  • Fixed bug in primesieve::iterator::previous_prime().
  • Fixed bug in primesieve_previous_prime().
  • Added stop_hint optimization to primesieve::iterator which gives a significant speed up if only few primes are generated.
  • Replaced GENERATE_PRIMES() macro by templatized callbackPrimes() method (src/primesieve/PrimeFinder.cpp).

New in Primesieve 5.0 (Feb 15, 2014)

  • Includes C bindings for all of its functions.
  • Features a new API.
  • New primesieve::iterator class that provides next_prime() and previous_prime() methods.
  • ParallelPrimeSieve now uses multi-threading by default, it does not care about arithmetic order anymore. Please do not use ParallelPrimeSieve directly anymore instead use the new API.
  • Renamed src/soe to src/primesieve.
  • Renamed PrimeSieveCallback class to Callback.
  • Moved most header files to include/primesieve.

New in Primesieve 4.2 (Mar 11, 2013)

  • libprimesieve generates (callback) primes up to 5% faster on little-endian CPUs (x86, x86-64) due to improved endiansafe_cast.h (src/soe).
  • The best pre-sieve setting is now automatically chosen at runtime, this speeds up sieving small intervals.
  • The Makefile now supports the Solaris OS.
  • Updated documentation: README, INSTALL, doc/EXAMPLES, doc/FAQ and doc/LIBPRIMESIEVE. New files: AUTHORS and THANKS.
  • Fixed a bug in the primesieve GUI code (doc/BUGS).
  • Updated ExpressionParser.h (src/apps/*) to version 2.5.
  • Added more example programs: examples/store_primes_in_vector.cpp and examples/nth_prime.cpp.
  • Lots of refactoring to make the code easier to understand.
  • API changes:
  • The undocumented pre-sieve methods have been removed (pre-sieving is now automatically configured at runtime).
  • void PrimeSieve::getPreSieve();
  • void PrimeSieve::setPreSieve(int);

New in Primesieve 4.1 (Jan 17, 2013)

  • New PrimeSieveCallback interface class that simplifies prime number generation with classes, see doc/USAGE_EXAMPLES.
  • The primesieve console (terminal) application now supports GNU-style long options e.g. --size=256.
  • Fixed a bug (for sizeof(int) > 4) in the bit population count algorithm, read BUGS file.
  • Updated files: README, INSTALL, doc/USAGE_EXAMPLES.
  • The Makefile now uses the system's default C++ compiler instead of GNU g++ which makes it more portable.
  • The primesieve_error class has been moved into its own file src/soe/primesieve_error.h (previously PrimeSieve.h).

New in Primesieve 4.0 (Oct 23, 2012)

  • Added support for OpenMP 2.*, useful for compilers that do not support OpenMP >= 3.0, e.g. MSVC, Apple g++.
  • New examples directory with 12 simple example programs.
  • New doc/API file that lists the public member functions of the
  • PrimeSieve and ParallelPrimeSieve C++ classes.
  • The Makefile is now POSIX compatible, it works with any POSIX shell e.g. sh, bash, ash, ksh, zsh, ...
  • The Makefile now supports MinGW (with MSYS) and Cygwin.
  • Fixed a shared libprimesieve bug (read doc/BUGS).
  • Up to 10 percent faster prime number generation due to new internal 64-bit getNextPrime() (previously 32-bit).
  • New unsynchronized ParallelPrimeSieve::generatePrimes() method that calls back primes in parallel (read USAGE_EXAMPLES).
  • Faster thread synchronization in ParallelPrimeSieve, replaced slow OpenMP critical directive with faster omp_test_lock().
  • Optimized prime k-tuplet (twin primes, ...) counting for out-of-order CPUs (src/soe/PrimeNumberFinder.cpp).
  • New primesieve_error() exception used for all exceptions within PrimeSieve and ParallelPrimeSieve (read USAGE_EXAMPLES).
  • New pre-sieve code (src/soe/PreSieve.cpp).
  • Ported the primesieve GUI application from Qt 4 to Qt 5.

New in Primesieve 3.8 (Jul 16, 2012)

  • Improved OOP design of WheelFactorization.h.
  • Minor speed up for big sieving primes ~2% (src/soe/EratBig.cpp), reduced the number of operations in the main sieving loop.
  • Minor speed up for small sieving primes ~3% (src/soe/EraSmall.cpp), new inner sieving loop without instruction dependencies that uses only 12 asm instructions (previously 16).
  • Improved OpenMP load balance in src/soe/ParallelPrimeSieve.cpp.
  • Improved code readability of EratSmall.cpp, EratMedium.cpp, EratBig.cpp, SieveOfEratosthenes.cpp and others.
  • The Makefile now automatically detects the CPU's L1 data cache size on Unix-like OSes (Linux, Mac OS X).
  • Renamed ./docs to ./doc
  • Revised README.txt, added 7. Motivation.
  • Updated INSTALL, LIBPRIMESIEVE and USAGE_EXAMPLES.
  • Added version #defines to PrimeSieve.h, e.g. for this release:
  • #define PRIMESIEVE_VERSION "3.8"
  • #define PRIMESIEVE_MAJOR_VERSION 3
  • #define PRIMESIEVE_MINOR_VERSION 8
  • #define PRIMESIEVE_YEAR 2012

New in Primesieve 3.6 (May 4, 2012)

  • Built with Intel C++ Compiler 12.1 (Composer XE 2011)
  • Minor speed up for small sieving primes ~ 5%

New in Primesieve 3.0 (Jul 18, 2011)

  • Improved thread scheduling (10 percent speed up)
  • Faster initialization (20 percent speed up)
  • Two new options: -o and -r

New in Primesieve 2.1 (Apr 19, 2011)

  • Added an arithmetic expression parser to ease number input
  • Supported operators: +,-,*,/,%,^,e
  • Examples: 2^32, 1e18+2e10
  • Fixed a lower bound bug present in version 1.0
  • Use of threads (OpenMP) instead of processes