A modern C++11 quantum computing library

Overview

Quantum++

Version 2.6 - 9 January 2021

Build status:

Build status - CircleCI Linux/macOS Build Status Build status

Chat (questions/issues)

Join the chat at https://gitter.im/vsoftco_qpp


About

Quantum++ is a modern C++11 general purpose quantum computing library, composed solely of template header files. Quantum++ is written in standard C++11 and has very low external dependencies, using only the Eigen 3 linear algebra header-only template library and, if available, the OpenMP multi-processing library.

Quantum++ is not restricted to qubit systems or specific quantum information processing tasks, being capable of simulating arbitrary quantum processes. The main design factors taken in consideration were the ease of use, high portability, and high performance. The library's simulation capabilities are only restricted by the amount of available physical memory. On a typical machine (Intel i5 8Gb RAM) Quantum++ can successfully simulate the evolution of 25 qubits in a pure state or of 12 qubits in a mixed state reasonably fast.

To report any bugs or ask for additional features/enhancements, please submit an issue with an appropriate label.

If you are interesting in contributing to this project, feel free to contact me. Alternatively, fork the repository, add your contribution, then finally create a pull request. If I accept the pull request, I will merge your custom branch with the latest development branch. The latter will eventually be merged into a future release version. To contribute, you need to have a solid knowledge of C++ (preferably C++11), including templates and the standard library, a basic knowledge of quantum computing and linear algebra, and working experience with Eigen 3.

For additional Eigen 3 documentation see http://eigen.tuxfamily.org/dox/. For a simple Eigen 3 quick ASCII reference see http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt.

Copyright (c) 2013 - 2021 softwareQ Inc. All rights reserved.


License

Quantum++ is distributed under the MIT license. Please see the LICENSE file for more details.


Installation instructions and further documentation

Please see the installation guide INSTALL.md and the comprehensive Wiki for further documentation and detailed examples.

To generate the full official API documentation in both LaTeX and HTML formats run doxygen on the Doxyfile file. The tool dot from the Graphviz package must be installed (sudo apt-get install graphviz in Ubuntu/Debian). Running doxygen will generate the documentation directory doc containing both the HTML and LaTeX documentation.

The HTML documentation file will be accessible by opening doc/html/index.html with the browser of your choice.

To generate a PDF file of the documentation, run

latexmk -pdf refman.tex

from the doc/latex directory or compile the file doc/latex/refman.tex with your LaTeX compiler. This will create the doc/latex/refman.pdf documentation file. Consult your favourite LaTeX manual for how to compile/build LaTeX files under your specific operating system.

Issues
  • QEngine.get_measured() does not work when a QASM file is executed.

    QEngine.get_measured() does not work when a QASM file is executed.

    Here is a test script:

    OPENQASM 2.0;
    include "qelib1.inc";
    
    qreg q[1];
    creg c[1];
    
    measure q->c;
    

    I load it to run in the QEngineby using the example program qpp_qasm(which is appended with a few lines to run get_measured()), but the get_measured() returns an empty vector.

    For that matter, the QEngine.to_JSON() does not contain any information of the existence of the measurestatement either.

    Did I miss something? I remember I could get the info about the measurestatement in a QASM file from the engine a year ago. I guess things have changed. What should I do now to get that info?

    opened by DevelopDaily 20
  • Mismatch issues of the rz

    Mismatch issues of the rz

    I have noticed three issues related to the rzgate.

    1. Run this QASM script on the Qiskit here (https://quantum-computing.ibm.com) and on qpp. The final states are different. The IBM produces the state[ 0.866-0.5j, 0+0j ] (see the attached screenshot), but qpp [1, 0]. The option USE_OPENQASM2_SPECS=false is used, so the qppresult should match that on IBM, shouldn't it?
    OPENQASM 2.0;
    include "qelib1.inc";
    qreg q[1];
    
    rz(pi/3) q[0];
    

    Qiskit result:

    rz

    1. In the preprocessor.hpp, rzis defined identically:

      https://github.com/softwareQinc/qpp/blob/main/qasmtools/include/qasmtools/parser/preprocessor.hpp#L66 https://github.com/softwareQinc/qpp/blob/main/qasmtools/include/qasmtools/parser/preprocessor.hpp#L103

      But, their gate implementations are different depending on the USE_OPENQASM2_SPECS.

      https://github.com/softwareQinc/qpp/blob/main/include/qasm/qasm.hpp#L116

      Is that a problem?

    2. There seems to be a documentation problem here (https://github.com/softwareQinc/qpp/blob/main/DISCREPANCIES.md) The rzdifference is not described but it is implemented differently.

    opened by DevelopDaily 15
  • Set seed of RandomDevices

    Set seed of RandomDevices

    Hi !

    When writing examples or tests, I like to use randomly generated objects while setting the seed, so they are repeatable. So I guess I should do:

    void set_seed(unsigned int s)
    {
        auto& gen =
    #ifdef NO_THREAD_LOCAL_
            RandomDevices::get_instance().get_prng();
    #else
            RandomDevices::get_thread_local_instance().get_prng();
    #endif
       gen.seed(s);
    }
    

    which is not great. I think the Singleton class could use a method like:

    static T& get_instance_depending_on_how_the_macro_is_defined() noexcept(std::is_nothrow_constructible<T>::value) {
           return
    #ifdef NO_THREAD_LOCAL_
            get_instance();
    #else
            get_thread_local_instance();
    #endif
        }
    

    random.hpp could be refactored a bit with this method. I can do a PR if you want, and if you help me find a better name for the method :stuck_out_tongue:

    opened by antoine-bussy 13
  • The phase estimation example - qpe.cpp

    The phase estimation example - qpe.cpp

    I think the example has a minor issue. The qppconvention is that the q0is the most significant bit, but the example uses it as the least significant bit.

    The developer may be given the freedom to interpret the endianness in his own way as long as he arranges the code subsequently to treat q0as the least significant bit. But, that may confuse some users down the road, since the examples serve the purpose of documentation.

    enhancement 
    opened by DevelopDaily 11
  • Question: can performance be improved by doing QCircuit.discard()?

    Question: can performance be improved by doing QCircuit.discard()?

    This question is motivated by using staqto map a small circuit to Tokyo. That results in this in the output QASM:

    qreg q[20];

    The small circuit (for educational purposes) only needs first 4 qubits, so I discard() the rest of the qubits (q[4]...q[19]). That drastically reduces the size of the ketreturned by the QEngine.get_psi(). That is very good.

    The trouble is that the time to run QEngine.execute() is almost same with or without the discard().

    The 16 qubits do not involve any quantum operations. I should expect a huge performance boost after discarding them, shouldn't I?

    enhancement 
    opened by DevelopDaily 11
  • Bitwise inner product

    Bitwise inner product

    Hi,

    I didn't find any obvious way to do a bitwise inner product between two basis ket, for Deutsch-Josza algorithm. To be clear : |0101> dot |1001> = 0*1 + 1*0 + 0*0 + 1*1 = 1

    A simple way to get this would be to have the inverse of mket()

    enhancement 
    opened by antoine-bussy 10
  • Conditional measurement problem

    Conditional measurement problem

    Here is a test case:

    OPENQASM 2.0;
    include "qelib1.inc";
    
    qreg q[2];
    creg c[2];
    
    h q;
    measure q[1] -> c[0];
    if(c==1) measure q[0] -> c[1];
    

    The ifstatement does not take effect no matter what the cvalue is. In other words, the measure q[0] -> c[1];is executed always.

    The Open QASM spec seems vague on whether conditional measurements should be allowed. I can't see why not. The qppdoes compile them, but just doesn't execute them correctly.

    mismatch 
    opened by DevelopDaily 8
  • A bug in qpp::applyCTRL()  function

    A bug in qpp::applyCTRL() function

    Hi,

    I want to report a bug in qpp::applyCTRL function, that there is a discrepancy in the behavior of the function regarding vectors and density matrices. Following is the code, that reproduces the bug.

    qpp::ket psi (8) ; //some random 3 qubit pure state
    // initialize psi
    qpp::cmat rho = psi*qpp::adjoint(psi); //density matrix
    
    qpp::cmat U (2,2) ; // some random unitary
    // initialize U
    
    auto A = qpp::applyCTRL(psi,U,{0,1},{2},{2,2,2}) ; // apply channel on pure state
    auto B = qpp::applyCTRL(rho,U,{0,1},{2},{2,2,2}) ; // apply channel on density matrix
    
    // Now A*adjoint(A) and B have to be equal. But from the code, they are not. Or may be, I am missing something much trivial.
    

    I suspect the bug is in the density matrix part, and the pure state or vector part is absolutely fine.

    bug 
    opened by titaschanda 8
  • Different results between Rigetti and qpp

    Different results between Rigetti and qpp

    This issue may be related to the staq Issue 34, but I am not sure. So, I open this one to track the problem.

    On qpp:

    OPENQASM 2.0;
    include "qelib1.inc";
    qreg q[2];
    rz (1.1544377492147073) q[0];
    h q[1];
    u1 (-1.1544377492147073) q[0];
    h q[0];
    ry (0.501899064626972) q[0];
    rz (-2.664259129025202) q[0];
    swap q[0], q[1];
    cx q[1], q[0];
    ry (-0.354312360364173) q[0];
    cx q[1], q[0];
    ry (-0.1912917581366851) q[0];
    cx q[1], q[0];
    rz (0.9715277168265499) q[0];
    cx q[1], q[0];
    rz (0.23743868408440671) q[0];
    

    The final state:

    0.4439      
    -0.0677419-0.552801i     
    0.0884309+0.233639i     
    -0.495458-0.429988i
    

    That can be compiled to run on the Rigetti simulator:

    RZ(1.1544377492147073) 0
    PHASE(-1.1544377492147073) 0
    H 0
    H 1
    RY(0.501899064626972) 0
    RZ(-2.664259129025202) 0
    SWAP 0 1
    CNOT 1 0
    RY(-0.354312360364173) 0
    CNOT 1 0
    RY(-0.1912917581366851) 0
    CNOT 1 0
    RZ(0.9715277168265499) 0
    CNOT 1 0
    RZ(0.23743868408440671) 0
    

    The final state:

    [ 
    0.43888697+0.0665232j      
    0.0524189+0.24425298j      
    0.0158663-0.55670996j      
    -0.42542397-0.49938197j
    ]
    
    opened by DevelopDaily 7
  • Reallocations causing huge memory demand

    Reallocations causing huge memory demand

    Reallocations of the state matrix happen at each

    const dyn_mat<typename Derived1::Scalar>& rstate = state;
    

    line in operations.h and each default copy thereof. I suspect this is because the reference is upcasted when passed as const Eigen::MatrixBase<Derived1>& state in the function argument and then needs to be converted back to a dyn_mat. For example, calling

    psi = qpp::apply(psi, qpp::gt.X, {1});
    

    from my code, a total of nine copies of the state are created within operations.h:

    1. at line 578 (apply overload with idx d)
    2. at line 492 (apply overload with dims)
    3. at line 61 (applyCTRL)
    4. for a copy reference in coeff_idx_ket (the copy constructor of Matrix is demonstrably called at the moment the coeff_idx_ket is defined) – is there a reason for it to be [=] anyway?
    5. at line 358 (result = rstate),

    along with temporary copies for the purposes of internal::_check_cvector and internal::_check_dims_match_cvect (at lines 532, 535, 349, 352). (Line numbers referring to f0765d7baf04e13f69f5b55e6219d3cec4a7ed8d.) Obviously only number 5 is necessary.

    This is no problem for small state vectors or density matrices but when the data reaches 1 GB it becomes a real issue.

    enhancement 
    opened by vasekp 7
  • Phase shift computation/removal

    Phase shift computation/removal

    Hi,

    I'm running the following test:

        auto state = qpp::randket().eval();
        auto const [result, probabilities, resulting_state] = qpp::measure(state, qpp::gt.H);
        EXPECT_MATRIX_CLOSE(resulting_state[0], qpp::st.plus(), 1e-12);
        EXPECT_MATRIX_CLOSE(resulting_state[1], qpp::st.minus(), 1e-12);
    

    The tests fail because the resulting states have a phase shift. Is there a mean to remove or compute the phase shift already in the API? Or to compare two states up to a phase shift?

    question 
    opened by antoine-bussy 6
  • Generate an arbitrary quantum state

    Generate an arbitrary quantum state

    The regetti / grove API has this very convenient and useful function:

    create_arbitrary_state()

    I used to think it would be difficult to achieve that, but I am amazed a function of about a hundred lines of Python code based on a 5 page paper could transform 0 to any states with only pow(2, n+2) - 4n - 4 CNOT gates and pow(2, n+2) - 5 one-qubit elementary rotation gates.

    I cannot find a similar function in the Quantum++. If it doesn't exist, I think it would be nice to implement it.

    enhancement 
    opened by DevelopDaily 3
  • A wish list:-)

    A wish list:-)

    I'd like to suggest you put more references into the API doc or source code comments, preferably as what SciPy people do in their "References" section. I don't mean that you spend a lot of time to put a "References" section into every piece of code. But, some references would be very helpful for understanding your particular implementation of those components of quintessential nature of quantum computing.

    Thanks.

    enhancement 
    opened by DevelopDaily 1
Releases(v3.1)
  • v2.0(Aug 24, 2019)

  • v1.0-rc4(Jan 24, 2018)

  • v1.0-rc3(Jan 22, 2018)

  • v1.0-rc2(Sep 7, 2017)

    Quantum++

    Version 1.0-rc2 - Release Candidate 2, 6 September 2017

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests via Google Test 1.8.0 (included with the project) are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v1.0-rc1(Nov 11, 2016)

    Quantum++

    Version 1.0-rc1 - Release Candidate 1, 11 November 2016

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests via Google Test 1.8.0 (included with the project) are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta4(Nov 2, 2016)

    Quantum++

    Version 1.0.0-beta4 - 2 November 2016

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests via Google Test 1.8.0 (included with the project) are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta3(Oct 22, 2016)

    Quantum++

    Version 1.0.0-beta3 - 22 October 2016

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests via Google Test 1.8.0 (included with the project) are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta2(Oct 13, 2016)

    Quantum++

    Version 1.0.0-beta2 - 13 October 2016

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests via Google Test 1.8.0 (included with the project) are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta1(Oct 10, 2016)

    Quantum++

    Version 1.0.0-beta1 - 10 October 2016

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests via Google Mock 1.7.0 (included with the project) are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v0.8.8.2(Oct 3, 2016)

    Quantum++

    Version 0.8.8.2 - 3 October 2016

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests (not yet covering the whole codebase) via GoogleTest are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v0.8.8(Sep 30, 2016)

    Quantum++

    Version 0.8.8 - 30 September 2016

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    • Unit tests (not yet covering the whole codebase) via GoogleTest are provided under ./unit_tests
    Source code(tar.gz)
    Source code(zip)
  • v0.8.6(Nov 1, 2015)

    Quantum++

    Version 0.8.6 - 1 November 2015

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    Source code(tar.gz)
    Source code(zip)
  • v0.8.4(Oct 14, 2015)

    Quantum++

    Version 0.8.4 - 14 October 2015

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    Source code(tar.gz)
    Source code(zip)
  • v0.8.2(May 20, 2015)

    Quantum++

    Version 0.8.2 - 20 May 2015

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    Source code(tar.gz)
    Source code(zip)
  • v0.8(May 8, 2015)

    Quantum++

    Version 0.8 - 8 May 2015

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    Source code(tar.gz)
    Source code(zip)
  • v0.7(Apr 23, 2015)

    Quantum++

    Version 0.7 - 22 April 2015

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    Source code(tar.gz)
    Source code(zip)
  • v0.6(Apr 16, 2015)

    Quantum++

    Version 0.6 - 16 April 2015

    Bugs may still be lingering around. I welcome any comments or bug reports.

    • For building instructions and additional information see the file ./README.md or the main repository page at https://github.com/vsoftco/qpp
    • A quick starting guide is provided in the file ./doc/quick.pdf
    • A set of documented examples are provided in the directory ./examples/
    • A complete pdf reference of all classes/functions and their descriptions is provided in the file ./doc/refman.pdf, and the corresponding html reference in the file ./doc/html/index.html
    • A set of changes from previous versions is provided in the file ./CHANGES
    Source code(tar.gz)
    Source code(zip)
C++ library for multi-physics simulation

Project CHRONO Project Chrono represents a community effort aimed at producing a physics-based modelling and simulation infrastructure based on a plat

null 1.4k May 13, 2022
High-performance C++ multibody dynamics/physics library for simulating articulated biomechanical and mechanical systems like vehicles, robots, and the human skeleton.

Simbody Simbody is a high-performance, open-source toolkit for science- and engineering-quality simulation of articulated mechanisms, including biomec

Simbody Project 1.9k May 15, 2022
λQ: A Simple Quantum Programming Language based on QWIRE.

λQ λQ: A Simple Language based on QWIRE which can be compiled to QASM. The name λQ means lambda calculus with quantum circuits. This is a term project

Wenhao Tang 5 Jul 11, 2021
Reference implementations of post-quantum cryptographic primitives

PQ Crypto Catalog Implementation of quantum-safe signature and KEM schemes submitted to NIST PQC Standardization Process. The goal is to provide an ea

Kris Kwiatkowski 18 Mar 30, 2022
Pseudofermion functional renormalization group solver for (frustrated) quantum magnets in two and three spatial dimensions.

SpinParser SpinParser ("Spin Pseudofermion Algorithms for Research on Spin Ensembles via Renormalization") is a software platform to perform pseudofer

Finn Lasse Buessen 19 Apr 22, 2022
Source code for the TKET quantum compiler, Python bindings and utilities

tket Introduction This repository contains the full source code for tket, a quantum SDK. If you just want to use tket via Python, the easiest way is t

Cambridge Quantum 120 May 6, 2022
A C++ GPU Computing Library for OpenCL

Boost.Compute Boost.Compute is a GPU/parallel-computing library for C++ based on OpenCL. The core library is a thin C++ wrapper over the OpenCL API an

Boost.org 1.3k May 14, 2022
A C library for statistical and scientific computing

Apophenia is an open statistical library for working with data sets and statistical or simulation models. It provides functions on the same level as t

null 182 Mar 17, 2022
A C++ GPU Computing Library for OpenCL

Boost.Compute Boost.Compute is a GPU/parallel-computing library for C++ based on OpenCL. The core library is a thin C++ wrapper over the OpenCL API an

Boost.org 1.3k May 8, 2022
HashLibPlus is a recommended C++11 hashing library that provides a fluent interface for computing hashes and checksums of strings, files, streams, bytearrays and untyped data to mention but a few.

HashLibPlus HashLibPlus is a recommended C++11 hashing library that provides a fluent interface for computing hashes and checksums of strings, files,

Telepati 7 Apr 11, 2022
An efficient C++17 GPU numerical computing library with Python-like syntax

MatX - Matrix Primitives Library MatX is a modern C++ library for numerical computing on NVIDIA GPUs. Near-native performance can be achieved while us

NVIDIA Corporation 476 May 5, 2022
Easy-to-use Scientific Computing library in/for C++ available for Linux and Windows.

Matrix Table of Contents Installation Development 2.1. Linux 2.2. Windows Benchmarking Testing Quick Start Guide 5.1. Initializers 5.2. Slicing 5.3. P

mlcpp 20 May 14, 2022
This is the git repository for the FFTW library for computing Fourier transforms (version 3.x), maintained by the FFTW authors.

This is the git repository for the FFTW library for computing Fourier transforms (version 3.x), maintained by the FFTW authors.

FFTW 2.1k May 11, 2022
Blitz++ is a C++ template class library which provides array objects for scientific computing

Blitz++ is a C++ template class library which provides array objects for scientific computing

Peter Kümmel 17 Nov 22, 2020
Patterns and behaviors for GPU computing

moderngpu 2.0 (c) 2016 Sean Baxter You can drop me a line here Full documentation with github wiki under heavy construction. Latest update: 2.12 2016

null 1.3k May 12, 2022
C++ tensors with broadcasting and lazy computing

Multi-dimensional arrays with broadcasting and lazy computing. Introduction xtensor is a C++ library meant for numerical analysis with multi-dimension

Xtensor Stack 2.6k May 15, 2022
C++ Parallel Computing and Asynchronous Networking Engine

中文版入口 Sogou C++ Workflow As Sogou`s C++ server engine, Sogou C++ Workflow supports almost all back-end C++ online services of Sogou, including all sea

Sogou-inc 8k May 13, 2022
Fidelius - YeeZ Privacy Computing

Fidelius - YeeZ Privacy Computing Introduction In order to empower data collaboration between enterprises and help enterprises use data to enhance the

YeeZTech 48 Apr 25, 2022
C++ Parallel Computing and Asynchronous Networking Engine

As Sogou`s C++ server engine, Sogou C++ Workflow supports almost all back-end C++ online services of Sogou, including all search services, cloud input method,online advertisements, etc., handling more than 10 billion requests every day. This is an enterprise-level programming engine in light and elegant design which can satisfy most C++ back-end development requirements.

Sogou-inc 8k May 9, 2022
A C++17 thread pool for high-performance scientific computing.

We present a modern C++17-compatible thread pool implementation, built from scratch with high-performance scientific computing in mind. The thread pool is implemented as a single lightweight and self-contained class, and does not have any dependencies other than the C++17 standard library, thus allowing a great degree of portability

Barak Shoshany 595 May 7, 2022
C++ Parallel Computing and Asynchronous Networking Engine

As Sogou`s C++ server engine, Sogou C++ Workflow supports almost all back-end C++ online services of Sogou, including all search services, cloud input method,online advertisements, etc., handling more than 10 billion requests every day

Sogou Open Source 8k May 11, 2022
C++ class for creating and computing arbitrary-length integers

BigNumber BigNumber is a C++ class that allows for the creation and computation of arbitrary-length integers. The maximum possible length of a BigNumb

Limeoats 125 May 8, 2022
A command line tool for numerically computing Out-of-time-ordered correlations for N=4 supersymmetric Yang-Mills theory and Beta deformed N=4 SYM.

A command line tool to compute OTOC for N=4 supersymmetric Yang–Mills theory This is a command line tool to numerically compute Out-of-time-ordered co

Gaoli Chen 1 Oct 16, 2021
Course project for Computing Principles

TrojanMap Author: Tianhong Qi This project focuses on using data structures in C++ and implementing various graph algorithms to build a map applicatio

Tim Qi 1 Oct 26, 2021
Playbit System interface defines an OS-like computing platform which can be implemented on a wide range of hosts

PlaySys The Playbit System interface PlaySys defines an OS-like computing platform which can be implemented on a wide range of hosts like Linux, BSD,

Playbit 219 May 10, 2022
GPTPU: General-Purpose Computing on (Edge) Tensor Processing Units

GPTPU: General-Purpose Computing on (Edge) Tensor Processing Units Welcome to the repository of ESCAL @ UCR's GPTPU project! We aim at demonstrating t

Extreme Storage and Computer Architecture Lab 31 Apr 30, 2022
Boki: Stateful Serverless Computing with Shared Logs [SOSP '21]

Boki Boki is a research FaaS runtime for stateful serverless computing with shared logs. Boki exports the shared log API to serverless functions, allo

Operating Systems and Architecture 31 Apr 16, 2022
Experimental and Comparative Performance Measurements of High Performance Computing Based on OpenMP and MPI

High-Performance-Computing-Experiments Experimental and Comparative Performance Measurements of High Performance Computing Based on OpenMP and MPI 实验结

Jiang Lu 1 Nov 27, 2021
Standalone c++ implementation for computing Motif Adjacency Matrices of large directed networks, for 3-node graphlets and 4-node graphletsa containing a 4 edge loop.

Building Motif Adjacency Matrices This is an efficient C++ software for building Motif Adjacency Matrices (MAM) of networks, for a range of motifs/gra

null 5 Mar 19, 2022