Giter VIP home page Giter VIP logo

fpplus's Introduction

FPplus

Scientific library for high-precision computations and research

FPplus was originally developed for a research project on instructions to accelerate high-precision computations, but it is also useful as a general-purpose library. FPplus features:

  • Header-only library for error-free transforms and double-double computations
    • Implements error-free addition, multiplication, and fused multiply-add
    • Implements double-double addition and multiplication in multiple variants
  • Compatible with C99, C++, OpenCL, and CUDA
  • Special versions of error-free transforms in SIMD intrinsics:
    • x86 SIMD (128-bit and 256-bit AVX + FMA, 512-bit wide MIC and AVX-512)
    • IBM VSX (POWER 7 and POWER 8) and QPX (Blue Gene/Q)
    • ARMv8 SIMD
  • Extensive documentation with references to scientific literature
  • Testsuite based on MPFR and Google Test
  • Examples and code-generators for high-precision algorithms:
    • Polynomial evaluation with compensated Horner scheme
    • Compensated dot product algorithm
    • Inner kernel of matrix multiplication (GEMM) operation in double-double precision

Requirements

CPU targets:
  • gcc-compatible compiler (tested on gcc, clang and icc)
  • Hardware FMA support
  • Precise floating-point semantics
    • No -ffast-math option when compiling with gcc or clang
    • -fp-model precise when compiling with icc
OpenCL targets:
  • cl_khr_fp64, cl_amd_fp64, or cl_APPLE_fp64_basic_ops extension
  • Hardware FMA support (FP_FAST_FMA must be defined by OpenCL compiler)
  • Precise floating-point semantics
    • No -cl-fast-relaxed-math option
CUDA targets:
  • Compute capability 2.0 or higher

Using FPplus

#include <fpplus.h>

Publications

Marat Dukhan, Richard Vuduc and Jason Riedy "Wanted: Floating-Point Add Round-off Error instruction". arXiv preprint 1603.00491 (2016)

Acknowledgements

HPC Garage logo Georgia Tech College of Computing logo

The library was developed by Marat Dukhan as a research project at Richard Vuduc's HPC Garage lab in the Georgia Institute of Technology, College of Computing, School of Computational Science and Engineering. FPplus is based on algorithms in Handbook of Floating-Point Arithmetics, David Bailey's QD library, the works of Jonathan Shewchuk, Theodorus Dekker, Donald Knuth, and Sylvie Boldo and Jean-Michel Muller. We thank Jason Riedy for his feedback and support.

This material is based upon work supported by the U.S. National Science Foundation (NSF) Award Number 1339745 and the U.S. Dept. of Energy (DOE), Office of Science, Advanced Scientific Computing Research under award DE-FC02-10ER26006/DE-SC0004915. Any opinions, findings and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect those of NSF or DOE.

fpplus's People

Contributors

manodeep avatar maratyszcza avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fpplus's Issues

Installation issues with python3

Thanks for writing this code-base. I am trying to install it on my laptop under python3.6 but have run into several issues.

The first error was from string-handling within the regexp in configure.py. The error was

    TypeError: cannot use a string pattern on a bytes-like object

I can fix that by simply adding a decode statement at the end of the following line:

    identification = banner.splitlines()[0].decode("utf-8")

The next errors are:

    for m in range(mr / simd.width):
TypeError: 'float' object cannot be interpreted as an integer

All of these errors can be fixed by simply using the following:

    from __future__ import division
    for m in range(mr // simd.width):

I have fixed these issues in my fork here. Happy to send a PR if you would like.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.