gbgpu: GPU/CPU Galactic Binary Waveforms
GBGPU
is a GPU-accelerated version of the FastGB
waveform which has been developed by Neil Cornish, Tyson Littenberg, Travis Robson, and Stas Babak. It computes gravitational waveforms for Galactic binary systems observable by LISA using a fast/slow-type decomposition. For more details on the original construction of FastGB
see arXiv:0704.1808.
The current version of the code is very closely related to the implementation of FastGB
in the LISA Data Challenges’ Python code package. The waveform code is entirely Python-based. It is about 1/2 the speed of the full C version, but much simpler in Python for right now. There are also many additional functions including fast likelihood computations for individual Galactic binaries, as well as fast C-based methods to combine waveforms into global fitting templates.
The code is CPU/GPU agnostic. CUDA and NVIDIA GPUs are required to run these codes for GPUs.
See the documentation for more details. This code was designed for arXiv:2205.03461. If you use any part of this code, please cite arXiv:2205.03461, its Zenodo page, arXiv:0704.1808, and arXiv:1806.00500.
Getting Started
Run pip install. This works only for CPU currently. For GPU, see below for installing from source.
pip install gbgpu
To import gbgpu:
from gbgpu.gbgpu import GBGPU
Prerequisites
To install this software for CPU usage, you need Python >3.4, and NumPy. We generally recommend installing everything, including gcc and g++ compilers, in the conda environment as is shown in the examples here. This generally helps avoid compilation and linking issues. If you use your own chosen compiler, you may need to add information to the setup.py
file.
To install this software for use with NVIDIA GPUs (compute capability >5.0), you need the CUDA toolkit and CuPy. The CUDA toolkit must have cuda version >8.0. Be sure to properly install CuPy within the correct CUDA toolkit version. Make sure the nvcc binary is on $PATH
or set it as the CUDAHOME
environment variable.
Installing
To pip install (only for CPU currently):
pip install gbgpu
To install from source:
Install Anaconda if you do not have it.
Create a virtual environment. Note: There is no available
conda
compiler for Windows. If you want to install for Windows, you will probably need to add libraries and include paths to thesetup.py
file.
conda create -n gbgpu_env -c conda-forge gcc_linux-64 gxx_linux-64 gsl numpy Cython scipy jupyter ipython h5py matplotlib python=3.12 cmake
conda activate gbgpu_env
If on MACOSX, substitute `gcc_linux-64` and `gxx_linus-64` with `clang_osx-64` and `clangxx_osx-64`.
If using GPUs, use pip to install cupy. If you have cuda version 9.2, for example:
pip install cupy-cuda92
Clone the repository.
git clone https://github.com/mikekatz04/GBGPU.git
cd GBGPU
Run install. Make sure CUDA is on your PATH.
pip install -v -e .
Running the Tests
Change to the testing directory:
cd gbgpu/tests
Run in the terminal:
python -m unittest discover
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
Current Version: 1.2.2
Contributors
Mathieu Dubois
Maxime Pigou
License
This project is licensed under the Apache License - see the LICENSE file for details.
Documentation:
- Fast GB Waveforms and Likelihoods
GBGPU
GBGPU.A
GBGPU.A_out
GBGPU.CPU_ONLY()
GBGPU.CPU_RECOMMENDED_WITH_GPU_SUPPORT()
GBGPU.E
GBGPU.E_out
GBGPU.GPU_ONLY()
GBGPU.GPU_RECOMMENDED()
GBGPU.T
GBGPU.T_out
GBGPU.X
GBGPU.X_out
GBGPU.Y
GBGPU.Y_out
GBGPU.Z
GBGPU.Z_out
GBGPU.adapt_backend_kwargs()
GBGPU.backend
GBGPU.backend_name
GBGPU.build_with_same_backend()
GBGPU.citation
GBGPU.fill_global_func
GBGPU.fill_global_template()
GBGPU.freqs
GBGPU.generate_global_template()
GBGPU.get_ll()
GBGPU.get_ll_func
GBGPU.information_matrix()
GBGPU.inject_signal()
GBGPU.orbits
GBGPU.prepare_additional_args()
GBGPU.run_wave()
GBGPU.supported_backends()
GBGPU.xp
GBGPU.special_get_N()
GBGPU.shift_frequency()
GBGPU.add_to_argS()
- Extending GBGPU Waveforms
GBGPUBase
base classGBGPUBase
GBGPUBase.get_basis_tensors
GBGPUBase.GenWave
GBGPUBase.GenWaveThird
GBGPUBase.unpack_data_1
GBGPUBase.XYZ
GBGPUBase.num_bin
GBGPUBase.N_max
GBGPUBase.start_inds
GBGPUBase.df
GBGPUBase.N
GBGPUBase.d_d
GBGPUBase.supported_backends()
GBGPUBase.get_ll_func
GBGPUBase.fill_global_func
GBGPUBase.orbits
GBGPUBase.citation
GBGPUBase.run_wave()
GBGPUBase.X_out
GBGPUBase.Y_out
GBGPUBase.Z_out
GBGPUBase.A_out
GBGPUBase.E_out
GBGPUBase.T_out
GBGPUBase.A
GBGPUBase.E
GBGPUBase.T
GBGPUBase.X
GBGPUBase.Y
GBGPUBase.Z
GBGPUBase.freqs
GBGPUBase.get_ll()
GBGPUBase.fill_global_template()
GBGPUBase.generate_global_template()
GBGPUBase.inject_signal()
GBGPUBase.information_matrix()
GBGPUBase.add_to_argS()
GBGPUBase.prepare_additional_args()
GBGPUBase.special_get_N()
GBGPUBase.shift_frequency()
- Third-body inclusion
- GBGPU Utility Functions