All Projects → dnbaker → frp

dnbaker / frp

Licence: GPL-3.0 license
FRP: Fast Random Projections

Programming Languages

C++
36643 projects - #6 most used programming language
Cuda
1817 projects
python
139335 projects - #7 most used programming language
Makefile
30231 projects
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to frp

Seqan
SeqAn's official repository.
Stars: ✭ 386 (+865%)
Mutual labels:  indexing, simd
xskipper
An Extensible Data Skipping Framework
Stars: ✭ 35 (-12.5%)
Mutual labels:  indexing
Singeli
High-level interface for low-level programming
Stars: ✭ 31 (-22.5%)
Mutual labels:  simd
StarWarsArrays.jl
Arrays indexed as the order of Star Wars movies
Stars: ✭ 93 (+132.5%)
Mutual labels:  indexing
recommendation-retrieval
A tutorial on scalable retrieval of matrix factorization recommendations
Stars: ✭ 27 (-32.5%)
Mutual labels:  indexing
supervised-random-projections
Python implementation of supervised PCA, supervised random projections, and their kernel counterparts.
Stars: ✭ 19 (-52.5%)
Mutual labels:  kernel-methods
kernel-ep
UAI 2015. Kernel-based just-in-time learning for expectation propagation
Stars: ✭ 16 (-60%)
Mutual labels:  kernel-methods
heyoka
C++ library for ODE integration via Taylor's method and LLVM
Stars: ✭ 151 (+277.5%)
Mutual labels:  simd
dbaTDPMon
dbaTDPMon - Troubleshoot Database Performance and Monitoring
Stars: ✭ 20 (-50%)
Mutual labels:  indexing
zig-gamedev
Building game development ecosystem for @ziglang!
Stars: ✭ 1,059 (+2547.5%)
Mutual labels:  simd
glm
OpenGL Mathematics (GLM)
Stars: ✭ 6,667 (+16567.5%)
Mutual labels:  simd
fecpp
Forward error correction with SIMD optimizations
Stars: ✭ 79 (+97.5%)
Mutual labels:  simd
dcurl
Hardware-accelerated Multi-threaded IOTA PoW, drop-in replacement for ccurl
Stars: ✭ 39 (-2.5%)
Mutual labels:  simd
simdjson-rust
Rust bindings for the simdjson project.
Stars: ✭ 59 (+47.5%)
Mutual labels:  simd
gosearch
a fast, real-time file searching program for linux
Stars: ✭ 68 (+70%)
Mutual labels:  indexing
SoftLight
A shader-based Software Renderer Using The LightSky Framework.
Stars: ✭ 2 (-95%)
Mutual labels:  simd
simdutf8
SIMD-accelerated UTF-8 validation for Rust.
Stars: ✭ 426 (+965%)
Mutual labels:  simd
wasm
fast wasm modules
Stars: ✭ 37 (-7.5%)
Mutual labels:  simd
simdjson-rs
Rust version of lemire's SimdJson
Stars: ✭ 18 (-55%)
Mutual labels:  simd
FFmpegPlayer
Simple FFmpeg video player
Stars: ✭ 72 (+80%)
Mutual labels:  simd

frp: Fast Randomized Projections

We use Blaze for fast linear algebra, Sleef for fast trigonometric operations, Fast Fast-Hadamard Transform from FALCONN-LIB for the Fast Hadamard Transform, FFTW3 for the FFT, and boost for special functions and random number generators. Only required boost headers are provided as submodules and no installation of boost is required.

Contents

  1. Orthogonal JL transform with linear space and linearithmic runtime
    1. This is available through the ojlt executable, in C++ programs accessing include/frp/jl.h, and using python bindings.
    2. Python bindings can be installed by cd python && python3 setup.py install.
  2. Kernel projections
    1. We support kernel approximation for the Gaussian kernel using Random Fourier Features, Orthogonal Random Features, Structured Orthogonal Random Features, and FastFood.
    2. We recommend Structured Orthogonal Random Features, as it has the highest accuracy in our experiments and can also be hundreds of times faster while still having a small memory footprint.
  3. A type-generic SIMD interface (vec/vec.h), which abstracts operations to allow the compiler to use the widest vectors possible as needed, facilitating generically dispatching the fastest implementation possible on a machine.
  4. Utilities 2. PRNVector (PseudoRandom Number Vector) to provide access to random vectors using only constant memory requires instead of explicitly storing them by generating values as needed. 3. Utilities for sampling and filling containers from distributions. 4. Acquiring cache sizes from the OS.
  5. Linear algebra methods
    1. Implementation of the Gram-Schmidt algorithm for orthogonalizing matrices.
    2. PCA using full eigendecomposition for symmetric matrices.
    3. Covariance Matrix calculation
  6. Miscellaneous, related work
    1. Dynamic Continuous Indexing for real-valued data
      1. Dynamic Continuous Indexing
      2. Tested
      3. Prioritized DCI
      4. Draft form.

Build instructions

make should compile a variety of tests. We assume you're using BLAS for your linear algebra; to avoid doing that, modify the Makefile and remove the -DBLAZE* flags.

To specify a different blas header file, use the CBLASFILE variable when compiling:

make ojlt CBLASFILE=mkl_cblas.h
# Or, use an environmental variable
export CBLASFILE=mkl_cblas.h && \
make ojlt

Commentary

The initial design of this library was to implement methods from https://arxiv.org/abs/1703.00864. The core transformss on which it is built are fast fast-hadamard transform accelerated structured matrix vector products. This has applications in memory-efficient, accelerated Johnson-Lindenstrauss Transforms, gaussian kernel approximation for linearizing datasets and FastFood/Adaptive Random Spinners.

DCI/Prioritized DCI usage

Notes:

During construction, it may be advantageous to use a std::set to maintain sorted indexes (logarithmic update time), whereas at query time, it's faster to use a contiguous array. We provide the cvt function, which copies the index, but converts the sorted index type from what it used to be (usually a red-black tree) into the destination type, by default an always-sorted array.

We suggest doing this for the purposes of faster construction and faster queries.

Additionally, we do not store any points, just references to them.

When using a non-default container which supports lower_bound functionality, one needs to both use std::less<void> for a comparator and overload has_lower_bound_mf struct.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].