#beam #mwa #radio-astronomy #primary #array #model #telescope

bin+lib mwa_hyperbeam

Murchison Widefield Array (MWA)射电望远镜的主波束代码

21 个版本

新版本 0.9.4 2024年8月20日
0.9.3 2024年7月30日
0.9.2 2024年6月21日
0.7.1 2024年1月29日
0.3.3 2021年3月10日

48科学

Download history 1/week @ 2024-05-03 123/week @ 2024-05-10 33/week @ 2024-05-17 141/week @ 2024-05-24 117/week @ 2024-06-14 282/week @ 2024-06-21 12/week @ 2024-06-28 24/week @ 2024-07-05 2/week @ 2024-07-12 145/week @ 2024-07-26 21/week @ 2024-08-02 20/week @ 2024-08-09 156/week @ 2024-08-16

342 每月下载量
mwa_hyperdrive 中使用

MPL-2.0 许可证

380KB
7.5K SLoC

mwa_hyperbeam

Murchison Widefield Array (MWA)射电望远镜的主波束代码。

此代码存在是为了提供一个正确、便捷的Murchison Widefield Array (MWA)全嵌入式元件(FEE)主波束模型实现,即“2016波束”。应优先使用此代码。如果存在问题,请在此提出,以便大家都能受益。

请参阅变更日志以获取代码的最新更改。

极化顺序

请参阅此文档以获取关于波束响应琼斯矩阵极化顺序的详细信息。如果应用了平行角校正,则代码可能会重新排序琼斯矩阵。

用法

hyperbeam需要MWA FEE HDF5文件。可以使用以下方法获取:

wget http://ws.mwatelescope.org/static/mwa_full_embedded_element_pattern.h5

在创建新的波束对象时,hyperbeam需要知道此HDF5文件的位置。最简单的方法是设置环境变量MWA_BEAM_FILE

export MWA_BEAM_FILE=/path/to/mwa_full_embedded_element_pattern.h5

(在 Pawsey 系统上,这应该是export MWA_BEAM_FILE=/pawsey/mwa/mwa_full_embedded_element_pattern.h5)

hyperbeam可以通过C的FFI(Foreign Function Interface)由任何编程语言使用。换句话说,大多数语言。请参阅examples目录中的Rust、C和Python使用示例。一个简单的Python示例是

>>> import mwa_hyperbeam
>>> beam = mwa_hyperbeam.FEEBeam()
>>> help(beam.calc_jones)
Help on built-in function calc_jones:

calc_jones(az_rad, za_rad, freq_hz, delays, amps, norm_to_zenith, latitude_rad, iau_order) method of builtins.FEEBeam instance
    Calculate the beam-response Jones matrix for a given direction and
    pointing. If `latitude_rad` is *not* supplied, the result will match
    the original specification of the FEE beam code (possibly more useful
    for engineers).

    Astronomers are more likely to want to specify `latitude_rad` (which
    will apply the parallactic-angle correction using the Earth latitude
    provided for the telescope) and `iau_order`. If `latitude_rad` is not
    given, then `iau_reorder` does nothing. See this document for more
    information:
    <https://github.com/MWATelescope/mwa_hyperbeam/blob/main/fee_pols.pdf>

    `delays` and `amps` apply to each dipole in an MWA tile in the M&C
    order; see
    <https://wiki.mwatelescope.org/pages/viewpage.action?pageId=48005139>.
    `delays` *must* have 16 elements, whereas `amps` can have 16 or 32
    elements; if 16 are given, then these map 1:1 with dipoles, otherwise
    the first 16 are for X dipole elements, and the next 16 are for Y.

>>> print(beam.calc_jones(0, 0.7, 167e6, [0]*16, [1]*16, True, -0.4660608448386394, True))
[-1.51506097e-01-4.35034884e-02j -9.76099405e-06-1.21699926e-05j
  1.73003520e-05-1.53580286e-05j -2.23184781e-01-4.51051073e-02j]

CUDA / HIP

hyperbeam 也可以在 NVIDIA GPU 或 AMD GPU 上运行。要查看使用示例,请查看任何名称中包含 "cuda" 或 "hip" 的示例。GPU 功能是通过 Cargo 功能提供的;有关从源安装的说明,请参阅下文。

安装

Python PyPI

如果您正在使用 Python 版本 >=3.6

pip install mwa_hyperbeam

预编译

请查看 GitHub 发布 页面。对于 Python 3.6+ 的所有版本,都有一个 Python 轮子,以及用于 C 风格链接的共享和静态对象。要了解如何链接 hyperbeam,请参阅 示例目录 中的 fee.c 文件。

因为这些 hyperbeam 对象已经编译了 HDF5 和 ERFA 库,所以它们的相应许可证也被分发。

从源码

先决条件

  • Cargo 和 Rust 编译器。推荐使用 rustup

    https://rust-lang.net.cn/tools/install

    Rust 编译器版本必须至少为 1.64.0

    $ rustc -V
    rustc 1.64.0 (a55dd71d5 2022-09-19)
    
  • hdf5

    • 可选;使用 hdf5-staticall-static 功能。
      • 需要 CMake 版本 3.10 或更高。
    • Ubuntu: libhdf5-dev
    • Arch: hdf5
    • 可以使用 HDF5_DIR 手动指定 C 库目录。
      • 如果没有指定,将使用 pkg-config 查找库。

克隆存储库,并运行

export RUSTFLAGS="-C target-cpu=native" # (optional) Use native CPU features (not portable!)
cargo build --release

对于与其他语言的用法,include 文件将位于 include 目录中,以及与 C 兼容的共享和静态对象位于 target/release 目录中。

CUDA

您是否在桌面 GPU 上运行 hyperbeam?那么您可能希望使用单精度浮点数进行编译

cargo build --release --features=cuda,gpu-single
cargo build --release --features=hip,gpu-single

否则,继续使用双精度浮点数

cargo build --release --features=cuda
cargo build --release --features=hip

桌面 GPU(例如,NVIDIA GeForce RTX 2070)的双精度计算能力比 "数据中心" GPU(例如,NVIDIA V100)显著低。允许 hyperbeam 在浮点类型之间切换,让用户在性能和精度之间做出权衡。

CUDA 也可以静态链接

cargo build --release --features=cuda,cuda-static

HIP

HIP 的情况与 CUDA 类似;使用 hip 功能,如果要让代码使用单精度浮点数,请使用 gpu-single。似乎 HIP 不提供静态库,因此没有提供静态功能。

静态依赖项

要制作不依赖于系统 HDF5 库的 hyperbeam,请给 build 命令一个功能标志

cargo build --release --features=hdf5-static

这将自动编译 HDF5 源代码并将其 "烘焙" 到 hyperbeam 产品中,这意味着不需要作为系统依赖项的 HDF5。需要 CMake 版本 3.10 或更高来构建 HDF5 源。

要编译所有 C 库静态

cargo build --release --features=all-static

Python

要将 hyperbeam 安装到您当前使用的虚拟环境或 conda 环境,您需要 Python 软件包 maturin(可以使用 pip 获取),然后运行

maturin develop --release -b pyo3 --features=python --strip

如果您不想安装 HDF5 作为系统依赖项,请包含 hdf5-static 功能

maturin develop --release -b pyo3 --features=python,hdf5-static --strip

与其他 FEE 波束代码的比较

以下是与其他FEE光束代码实现的比较表。所有基准测试都在独特的方位角和仰角方向上进行,且都在同一系统上。CPU是Ryzen 9 3900X,具有12个核心和SMT(24个线程)。CUDA基准测试使用NVIDIA GeForce RTX 2070。除非特别说明“并行”,否则所有基准测试都是串行进行的。Python时间是通过在计算前后运行time.time()来测量的。内存使用量是通过在命令上运行time -(不是与您的shell相关的time;这通常在/usr/bin/time)来测量的。

代码 方向数量 持续时间 最大内存使用量
mwa_pb 500 98.8 毫秒 134.6 MiB
100000 13.4 秒 5.29 GiB
1000000 139.8 秒 51.6 GiB
mwa-reduce (C++) 500 115.2 毫秒 48.9 MiB
10000 2.417 秒 6.02 GiB
mwa_hyperbeam 500 10.0 毫秒 9.75 MiB
100000 1.82 秒 11.3 MiB
1000000 18.1 秒 25.0 MiB
mwa_hyperbeam (并行) 1000000 1.55 秒 88.8 MiB
mwa_hyperbeam (通过Python) 500 20.5 毫秒 44.2 MiB
100000 3.70 秒 45.4 MiB
1000000 37.2 秒 59.0 MiB
mwa_hyperbeam (通过Python,并行) 1000000 2.49 秒 246.6 MiB
mwa_hyperbeam (CUDA,单精度) 1000000 450 毫秒 253.8 MiB
1e8 3.08 秒 14.26 GiB

不确定C++代码出了什么问题。也许是我调用CalcJonesArray的方式不正确,但它使用了大量的内存。无论如何,hyperbeam似乎快了大约10倍。如果您知道如何与Everybeam进行比较,请告诉我。

故障排除

再次使用hyperbeam运行您的代码,但这次使用调试构建。这应该就像运行

cargo build

然后使用./target/debug中的结果一样简单。

如果这不能帮助揭示问题,请在新的GitHub问题中报告所使用的软件版本、您的使用情况和程序输出。

hyperbeam?

AERODACTYL使用了超光束!

依赖关系

~10–25MB
~427K SLoC