All Projects → ledatelescope → bifrost

ledatelescope / bifrost

Licence: BSD-3-Clause License
A stream processing framework for high-throughput applications.

Programming Languages

python
139335 projects - #7 most used programming language
C++
36643 projects - #6 most used programming language
shell
77523 projects
Cuda
1817 projects
c
50402 projects - #5 most used programming language
M4
1887 projects

Projects that are alternatives of or similar to bifrost

Bayadera
High-performance Bayesian Data Analysis on the GPU in Clojure
Stars: ✭ 342 (+612.5%)
Mutual labels:  gpu, cuda, high-performance-computing
Hipsycl
Implementation of SYCL for CPUs, AMD GPUs, NVIDIA GPUs
Stars: ✭ 377 (+685.42%)
Mutual labels:  gpu, cuda, high-performance-computing
Neanderthal
Fast Clojure Matrix Library
Stars: ✭ 927 (+1831.25%)
Mutual labels:  gpu, cuda, high-performance-computing
gpubootcamp
This repository consists for gpu bootcamp material for HPC and AI
Stars: ✭ 227 (+372.92%)
Mutual labels:  gpu, cuda
Pydis
A simple longslit spectroscopy pipeline in Python
Stars: ✭ 37 (-22.92%)
Mutual labels:  pipeline, astronomy
Ensembl Hive
EnsEMBL Hive - a system for creating and running pipelines on a distributed compute resource
Stars: ✭ 44 (-8.33%)
Mutual labels:  pipeline, high-performance-computing
Virgo
📡 Virgo: A Versatile Spectrometer for Radio Astronomy
Stars: ✭ 85 (+77.08%)
Mutual labels:  astronomy, radio-astronomy
Pex Context
Modern WebGL state wrapper for PEX: allocate GPU resources (textures, buffers), setup state pipelines and passes, and combine them into commands.
Stars: ✭ 117 (+143.75%)
Mutual labels:  pipeline, gpu
Drake
An R-focused pipeline toolkit for reproducibility and high-performance computing
Stars: ✭ 1,301 (+2610.42%)
Mutual labels:  pipeline, high-performance-computing
targets-minimal
A minimal example data analysis project with the targets R package
Stars: ✭ 50 (+4.17%)
Mutual labels:  pipeline, high-performance-computing
allgebra
Base container for developing C++ and Fortran HPC applications
Stars: ✭ 14 (-70.83%)
Mutual labels:  gpu, cuda
Serving
A flexible, high-performance carrier for machine learning models(『飞桨』服务化部署框架)
Stars: ✭ 403 (+739.58%)
Mutual labels:  pipeline, gpu
Targets
Function-oriented Make-like declarative workflows for R
Stars: ✭ 293 (+510.42%)
Mutual labels:  pipeline, high-performance-computing
Drake Examples
Example workflows for the drake R package
Stars: ✭ 57 (+18.75%)
Mutual labels:  pipeline, high-performance-computing
prose
A python framework to process FITS images. Built for Astronomy.
Stars: ✭ 21 (-56.25%)
Mutual labels:  pipeline, astronomy
Supra
SUPRA: Software Defined Ultrasound Processing for Real-Time Applications - An Open Source 2D and 3D Pipeline from Beamforming to B-Mode
Stars: ✭ 96 (+100%)
Mutual labels:  pipeline, cuda
TART
Transient Array Radio Telescope
Stars: ✭ 20 (-58.33%)
Mutual labels:  astronomy, radio-astronomy
GOSH
An ultra-fast, GPU-based large graph embedding algorithm utilizing a novel coarsening algorithm requiring not more than a single GPU.
Stars: ✭ 12 (-75%)
Mutual labels:  cuda, high-performance-computing
peakperf
Achieve peak performance on x86 CPUs and NVIDIA GPUs
Stars: ✭ 33 (-31.25%)
Mutual labels:  gpu, cuda
Occa
JIT Compilation for Multiple Architectures: C++, OpenMP, CUDA, HIP, OpenCL, Metal
Stars: ✭ 230 (+379.17%)
Mutual labels:  gpu, cuda

Bifrost

CPU Build GPU Build Coverage
GHA Build Status Coverage Status

A stream processing framework for high-throughput applications.

Paper

Bifrost Documentation

Bifrost Roadmap

A Simple Pipeline

Here's a snippet that reads Sigproc filterbank files, applies a Fast Dispersion Measure Transform (FDMT) on the GPU, and writes the results to a set of dedispersed time series files:

import bifrost as bf
import sys

filenames = sys.argv[1:]

print "Building pipeline"
data = bf.blocks.read_sigproc(filenames, gulp_nframe=128)
data = bf.blocks.copy(data, 'cuda')
data = bf.blocks.transpose(data, ['pol', 'freq', 'time'])
data = bf.blocks.fdmt(data, max_dm=100.)
data = bf.blocks.copy(data, 'cuda_host')
bf.blocks.write_sigproc(data)

print "Running pipeline"
bf.get_default_pipeline().run()
print "All done"

A More Complex Pipeline

Below is a longer snippet that demonstrates some additional features of Bifrost pipelines, including the BlockChainer tool, block scopes, CPU and GPU binding, data views, and dot graph output. This example generates high-resolution spectra from Guppi Raw data:

import bifrost as bf
import sys

filenames = sys.argv[1:]
f_avg = 4
n_int = 8

print "Building pipeline"
bc = bf.BlockChainer()
bc.blocks.read_guppi_raw(filenames, core=0)
bc.blocks.copy(space='cuda', core=1)
with bf.block_scope(fuse=True, gpu=0):
    bc.blocks.transpose(['time', 'pol', 'freq', 'fine_time'])
    bc.blocks.fft(axes='fine_time', axis_labels='fine_freq', apply_fftshift=True)
    bc.blocks.detect('stokes')
    bc.views.merge_axes('freq', 'fine_freq')
    bc.blocks.reduce('freq', f_avg)
    bc.blocks.accumulate(n_int)
bc.blocks.copy(space='cuda_host', core=2)
bc.blocks.write_sigproc(core=3)

pipeline = bf.get_default_pipeline()
print pipeline.dot_graph()
print "Running pipeline"
pipeline.shutdown_on_signals()
pipeline.run()
print "All done"

Feature Overview

  • Designed for sustained high-throughput stream processing
  • Python API wraps fast C++/CUDA backend
  • Fast and flexible ring buffer specifically designed for processing continuous data streams
  • Native support for both system (CPU) and CUDA (GPU) memory spaces and computation
  • Fast kernels for transposition, dedispersion, correlation, beamforming and more
  • bfMap: JIT-compiled ND array transformations
  • Fast UDP data capture
  • A growing library of ready-to-use pipeline 'blocks'
  • Rich metadata enables seamless interoperability between blocks

Installation

For a quick demo which you can run in-browser without installation, go to the following link.

C Dependencies

$ sudo apt-get install exuberant-ctags

Python Dependencies

  • numpy
  • contextlib2
  • pint
  • ctypesgen
$ sudo pip install numpy contextlib2 pint ctypesgen==1.0.2

Bifrost Installation

To configure Bifrost for you your system and build the library, then run:

$ ./configure
$ make -j
$ sudo make install

By default this will install the library and headers into /usr/local/lib and /usr/local/include respectively. You can use the --prefix option to configure to change this.

You can call the following for a local Python installation:

$ ./configure --with-pyinstall-flags=--user
$ make -j
$ sudo make install HAVE_PYTHON=0
$ make -C python install

Docker Container

Install dependencies:

Build Docker image:

$ make docker

Launch container:

$ nvidia-docker run --rm -it ledatelescope/bifrost

For CPU-only builds:

$ make docker-cpu
$ docker run --rm -it ledatelescope/bifrost

Running Tests

To run all CPU and GPU tests:

$ make test

Documentation

Online Bifrost Documentation

Building the Docs with Docker

To quickly build the docs using Docker, ensure that you have built a Bifrost container as ledatelescope/bifrost. Then, inside the docs folder, execute ./docker_build_docs.sh, which will create a container called bifrost_docs, then run it, and have it complete the docs-building process for you, outputting the entire html documentation inside docs/html on your machine.

Building the Docs from Scratch

Install sphinx and breathe using pip, and also install Doxygen.

Doxygen documentation can be generated by running:

$ make doc

This documentation can then be used in a Sphinx build by running

$ make html

inside the /docs directory.

Telemetry

By default Bifrost installs with basic Python telemetry enabled in order to help inform how the software is used and to help inform future development. The data collected as part of this consist seven things:

  • a timestamp for when the report is generated,
  • a unique installation identifier,
  • the Bifrost version being used,
  • the execution time of the Python process that imports Bifrost,
  • which Bifrost modules are imported,
  • which Bifrost functions are used and their average execution times, and
  • which Bifrost scripts are used. These data are sent to the Bifrost developers using a HTTP POST request where they are aggregated.

Users can opt out of telemetry collection using:

python -m bifrost.telemetry --disable

This command will set a disk-based flag that disables the reporting process.

Acknowledgement

If you make use of Bifrost as part of your data collection or analysis please include the following acknowledgement in your publications:

This research has made use of Bifrost (Cranmer et al. 2017). Continued development of Bifrost is supported by NSF award OAC/2103707.

and cite:

\bibitem[Cranmer et al.(2017)]{2017JAI.....650007C} Cranmer, M.~D., Barsdell, B.~R., Price, D.~C., et al.\ 2017, Journal of Astronomical Instrumentation, 6, 1750007. doi:10.1142/S2251171717500076

Contributors

  • Ben Barsdell
  • Daniel Price
  • Miles Cranmer
  • Hugh Garsden
  • Jayce Dowell
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].