A library for elementwise multithreaded algebra and multithreaded random number generation.
Project description
mtalg — Multithreaded Algebra
About
mtalg is a package for multithreaded algebra and random number generation.
While numpy does support out of the box multithreaded linear algebra (numpy.linalg) for operations such as matrix multiplication, decomposition, spectral analysis, and related functions, which are building on libraries such as BLAS and LAPACK, the same does not hold true for simpler algebraic element-wise operations. Similarly can be said for the generation of random variates.
mtalg is the fastest library known to us for large scale element-wise algebraic operations and random number generation. For more info on benchmarks you can see the dedicated section below.
Major benefits become apparent past $10^7
$ operations for both the element-wise algebra and the random number generator modules.
Installation
pip install mtalg
How to use
Import random number generator and algebra functions
import mtalg
from mtalg.random import MultithreadedRNG
Create an instance of the multithreaded random number generator with seed for reproducability and number of threads to be used
mrng = MultithreadedRNG(seed=1, num_threads=4)
Create two arrays (results are stored in mrng.values
)
mrng.standard_normal(size=(10_000, 5_000))
A = mrng.values
mrng.uniform(size=(10_000, 5_000), low=0, high=10)
B = mrng.values
Add B to A (A is modified inplace)
mtalg.add(A, B, num_threads=4)
Subtract A from B (B is modified inplace)
mtalg.sub(A, B, direction='right', num_threads=4)
Multiply, divide and raise to power (A is modified inplace)
mtalg.mul(A, B, num_threads=4)
mtalg.div(A, B, num_threads=4)
mtalg.pow(A, B, num_threads=4)
Benchmarks
Elementwise algebra
Random number generation
Aknowledgments
The module for multithreaded generation of random numbers is inspired from here.
Authors
Wouter Wakker and Luca Mingarelli, 2021
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.