gpt4 book ai didi

mpi - Rust on 网格计算

转载 作者:行者123 更新时间:2023-11-29 07:42:24 25 4
gpt4 key购买 nike

我正在寻找为我的研究创建一些小型生物信息学程序的 Rust 实现。我的主要考虑因素之一是性能,虽然我知道我可以安排 Rust 程序在带有 qsub 的网格上运行——我有权访问的集群使用 Oracle 的 GridEngine——但我担心我没有调用MPI 直接会导致 Rust 程序出现性能问题。

不使用 MPI 库调度程序是否会大大影响性能?我应该在 Rust 中使用 MPI 库吗?如果是,是否有任何已知的 Rust MPI 库?我找过一个,但什么也没找到。

最佳答案

我使用过几种 super 计算设备(我是一名天体物理学家)并且经常遇到同样的问题:我非常了解 C/C++,但更喜欢使用其他语言。

一般来说,除 MPI 之外的任何方法都可以,但考虑到此类 super 计算机通常具有高度优化的 MPI 库,通常为集群中集成的特定硬件量身定制。如果不使用 MPI,很难判断 Rust 程序的性能会受到多大影响,但最安全的做法是继续使用集群上提供的 MPI 实现。

在像 MPI 库这样的 C 库周围使用 Rust 包装器没有性能损失,因为瓶颈是在节点之间传输数据(例如通过 MPI_Send)所需的时间,而不是额外函数调用的可忽略成本. (此外,Rust 不是这种情况:没有额外的函数调用,如上所述。)

然而,尽管 Rust 提供了非常好的 FFI,但创建 MPI 绑定(bind)并不容易。问题在于 MPI 不是一个库,而是一个规范。流行的 MPI 库是 OpenMPI ( http://www.open-mpi.org ) 和 MPICH ( http://www.mpich.org )。它们中的每一个在实现标准的方式上都略有不同,它们通常使用 C 预处理器宏来弥补这些差异。很少有 FFI 能够处理复杂的宏;我不知道 Rust 在这里得分如何。

例如,我在 Free Pascal 中实现了一个 MPI 程序,但我无法使用现有的 MPICH 绑定(bind)(http://wiki.lazarus.freepascal.org/MPICH),因为我使用的集群提供了自己的 MPI 库,我更喜欢使用它一个是出于上述原因。我无法重用 MPICH 绑定(bind),因为他们假设像 MPI_BYTE 这样的常量是硬编码的整数常量。但在我的例子中,它们是指向不透明结构的指针,这些结构似乎是在调用 MPI_Init 时创建的。

Julia 绑定(bind)到 MPI (https://github.com/lcw/MPI.jl) 通过在安装期间运行 C 和 Fortran 程序来解决此问题,这些程序生成具有此类常量正确值的 Julia 代码。参见例如https://github.com/lcw/MPI.jl/blob/master/deps/make_f_const.f

在我的例子中,我更喜欢实现一个中间件,即一个用更“可预测”的接口(interface)包装 MPI 调用的小型 C 库。 (这或多或少也是 Python 和 Ocaml 绑定(bind)所做的,请参阅 https://forge.ocamlcore.org/projects/ocamlmpi/ 和 http://mpi4py.scipy.org。)事情运行顺利,到目前为止我没有遇到任何问题。

关于mpi - Rust on 网格计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com