All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- msrv1.80
- ⬆️ mwalib v1.8.2, marlu0.15.0 rubbl0.8 casacore3.5 ndarray0.16 pyo3 0.22 fitsio 0.21.6 lazy_static
- fix cuda keyring issue, update ubuntu2204 in CI
- use hdf5_metno
Changes
- Native CPU compiler options off by default for better portability.
Fixed
- fix a compile error when specifying env
HIP_FLAGS
with--features=hip
Fixed
- reduce wasted cycles if the number of coefficients in the beam file is less than maximum N that the beam kernels are sized for. Since NMAX=31 and the default beam file is in the low 20s, this speeds things up.
Fixed
- fix #11 : revert some of #9 , moving device memory allocations back onto the stack, this is fine because the kernels are smaller than before.
Fixed
- Huge thanks to @robotopia for fixing #9
Fixed
- update marlu 0.11.0 (no code changes)
Fixed
- CI (no code changes).
Fixed
- A (seemingly rare) race condition in FEE GPU code.
- examples/analytic_cuda_device.cu wasn't complete.
Added
-
Expose Rust function
fix_amps_ndarray
-
FFI functions
See the changes below for an explanation.
get_fee_freq_map
get_fee_tile_map
Changed
-
FFI functions
Most of these changes are to disambiguate the FEE beam from the analytic beam and hopefully encourage a consistent naming scheme.
calc_jones
->fee_calc_jones
calc_jones_array
->fee_calc_jones_array
closest_freq
->fee_closest_freq
calc_jones_gpu
->fee_calc_jones_gpu
calc_jones_gpu_device
->fee_calc_jones_gpu_device
calc_jones_gpu_device_inner
->fee_calc_jones_gpu_device_inner
get_freq_map
->get_fee_device_freq_map
get_tile_map
->get_fee_device_tile_map
- The old
get_*_map
functions returned device pointers. Callers should now use theget_fee_device_*_map
functions for this purpose. New functionsget_fee_*_map
yield the host pointers for the maps.
- The old
Added
- The "analytic" MWA beam
- There are (unfortunately) two flavours -- "RTS" and "mwa_pb". Both are supported.
Added
- Support for compiling GPU code with HIP
- FFI function
calc_jones_gpu_device_inner
- This is the same as
calc_jones_gpu_device
, but allows the caller to pass in their own device buffers, so thathyperbeam
doesn't need to allocate its own.
- This is the same as
- Set the $CXX variable to the C++ compiler in $CUDA_PATH, if $CXX is not already set and $CUDA_PATH/bin/g++ exists.
Changed
- The minimum required Rust version is now 1.64.
- Using single-precision floating point calculations on a GPU (CUDA or HIP) is
now done with the
gpu-single
feature, notcuda-single
. hyperbeam
no longer depends onERFA
.- The pure-Rust version is now used instead, and this means that the C library is no longer required.
- CPU code now runs significantly faster.
- CUDA code now runs significantly faster.
- GPU FFI functions now take
i32
instead ofu32
for the number of directions.- This isn't a downgrade; the internal code always used an
i32
, so it was dishonest for the code to look like it accepted more thani32::MAX
directions.
- This isn't a downgrade; the internal code always used an
array_latitude_rad
arguments have been renamed tolatitude_rad
- This functionally changes nothing, but is maybe a little less confusing. "array" was used in the sense of the Murchison Widefield Array, not as a collection of numbers.
Fixed
- Calling GPU FEE functions without any directions no longer causes a GPU error.
Fixed
- A seemingly-rarely-occurring bug in CUDA FEE code.
- Some Y dipole values were being used for X dipole values (:facepalm:), but despite this bug being present for many people over many thousands of observations, I only spotted this on a particular observation.
- Fix
get_num_unique_tiles
being unavailable forFEEBeamCUDA
. - Some function comments.
- Some clippy lints.
Added
calc_jones
functions have now been renamed to "_pair" functions, which take independent arguments of azimuths and zenith angles. The original functions (e.g.FEEBeam::calc_jones
) now takemarlu::AzEl
, which may be more convenient for the caller by avoiding the need to allocate new arrays.
Changed
- The minimum required Rust version is now 1.60.
- Python 3.6 support has been dropped, but 3.10 support is available.
- Rust function APIs have changed.
- Previously, the MWA latitude was hard-coded when doing the parallactic-angle correction. Now, to get the correction, callers must supply a latitude.
- The old "eng" functions have been removed, but their behaviour can be
obtained by supplying
None
as the latitude. - See the note above about added "pair" functions.
- FFI function calls and error handling has changed. Please familiarise yourself with the new include file and/or examples.
- Function documentation is now more consistent and hopefully more readable.
Fixed
- CUDA compilation on ozstar failed because of an arithmetic operation between two different types. Compilation has succeeded elsewhere, such as on Ubuntu, Arch, Pawsey's garrawarla and DUG. The code has changed to prevent the issue in the first place and no compilation issues have been spotted.
- CUDA function prototypes were being included in the C header, even if no CUDA feature was enabled.
- The CUDA library libcudart was always statically linked by mistake. It is now linked statically only if the cargo feature "cuda-static" is used, or one of the PKG_CONFIG environment variables is set.
Added
- FEE beam code for CUDA
- The original code is courtesy of Cristian Di Pietrantonio and Maciej Cytowski on behalf of the Pawsey Supercomputing Centre.
- CHJ modified it to be easily called from Rust.
- It is is possible to run the code in single- or double-precision (Cargo features "cuda-single" and "cuda", respectively). This is important because most NVIDIA desktop GPUs have significantly less double-precision compute capability.
- There are examples of using the CUDA functionality from Rust, C and Python.
- Parallactic angle correction
- Jack Line did a thorough investigation of what our beam responses should be; the write up is here.
- New Rust functions are provided (
*_eng*
for "engineering") to get the old-style beam responses. The existing functions do the corrections by default.
- A binary
verify-beam-file
- (In theory) verifies that an HDF5 FEE beam file has sensible contents.
- The only way that standard beam calculations can fail is if the spherical harmonic coefficients are nonsensical, so this binary is an attempt to ensure that the files used are sensible.
Changed
- Rust API
calc_jones*_array
functions now return aVec
, not anArray1
.
- Rust internals
- Small optimisations.
- Small documentation clean ups.
- C API
- The caller must now specify if they want the parallactic angle correction.
- All functions that can fail return an error code. If this is non-zero, the function failed.
- The caller can also provide error strings to these fallible functions; in the event of failure, an error message is written to the string.
- The example C files have been modified to conform with these changes.
- Python API
- The caller must now specify if they want the parallactic angle correction.