11 个版本

使用旧的 Rust 2015

0.3.1 2016 年 7 月 25 日
0.3.0 2016 年 3 月 1 日
0.2.4 2016 年 2 月 29 日
0.1.3 2016 年 2 月 23 日

#22 in #sequence-alignment

Download history 33/week @ 2024-04-01 4/week @ 2024-04-08 7/week @ 2024-04-15 7/week @ 2024-04-22 8/week @ 2024-04-29 6/week @ 2024-05-06 10/week @ 2024-05-13 10/week @ 2024-05-20 10/week @ 2024-05-27 18/week @ 2024-06-03 25/week @ 2024-06-10 27/week @ 2024-06-17 20/week @ 2024-06-24 33/week @ 2024-07-01 17/week @ 2024-07-08

101 每月下载量
用于 fastq

MIT 许可证

7.5MB
171K SLoC

C 128K SLoC // 0.1% comments Rust 15K SLoC // 0.0% comments Cython 8K SLoC // 0.0% comments Shell 7.5K SLoC // 0.2% comments M4 7.5K SLoC // 0.2% comments C++ 2.5K SLoC // 0.1% comments Python 1.5K SLoC // 0.4% comments Automake 689 SLoC // 0.1% comments

parasailors

Build Status crates.io API Docs License

parasailors 是 Rust 对 parasail 向量化双序列序列比对库的绑定。 parasail 提供了 Smith-WatermanNeedleman-Wunsch半全局比对 算法的向量化/SIMD 版本,用于双序列 DNA/蛋白质序列比对。

原始 C 库提供了数百个用于比对的函数。尽管它们只实现了 3 种算法,但它们根据使用的 SIMD ISA、底层计算的整数宽度、是否计算比对的统计信息、是否返回动态规划矩阵的行或列等因素而有所不同。然而,该库还提供了自动 SIMD 功能检测(根据 CPU 架构动态调度函数),以及用于选择计算的正确整数宽度的溢出检测方法。为了简化 Rust 中缺乏更成熟的 SIMD 功能检测时的使用,这些调度函数目前在 parasailors 中被调用。

警告:绑定目前处于不成熟状态。如果您发现任何令人担忧的问题,请提出问题 :)。

基准测试

使用相同的 5kb 随机序列在同一台机器上(CPU 支持 AVX2)。

$ rustc --version
rustc 1.8.0-nightly (3c9442fc5 2016-02-04)
$ cat /proc/cpuinfo | grep "model name"
model name	: Intel(R) Xeon(R) CPU E5-2603 v3 @ 1.60GHz
# ... other cores omitted

一个非常粗略的估计表明,在我的机器上,parasailors 相比 rust-bio 的顺序比对速度提高了 98.7% - 98.9%,显然需要调用原生 C 代码来实现加速。

rust-bio

出色的 rust-bio 库的(顺序)双序列比对。

$ git clone https://github.com/rust-bio/rust-bio
# ...
$ git checkout v0.4.0
# ...
$ multirust run nightly cargo bench
# ... other benchmarks omitted
test bench_aligner_wc_global     ... bench: 992,524,365 ns/iter (+/- 12,619,674)
test bench_aligner_wc_local      ... bench: 1,041,005,609 ns/iter (+/- 14,608,932)
test bench_aligner_wc_semiglobal ... bench: 990,937,047 ns/iter (+/- 7,047,941)

parasailors

$ multirust run nightly cargo bench
# ...
test bench_global_fresh_profile     ... bench:  14,096,259 ns/iter (+/- 50,964)
test bench_global_reuse_profile     ... bench:  12,647,865 ns/iter (+/- 55,200)
test bench_local_fresh_profile      ... bench:  11,006,416 ns/iter (+/- 35,788)
test bench_local_reuse_profile      ... bench:   9,543,404 ns/iter (+/- 49,748)
test bench_semiglobal_fresh_profile ... bench:  13,909,503 ns/iter (+/- 30,403)
test bench_semiglobal_reuse_profile ... bench:  12,465,250 ns/iter (+/- 52,930)

使用说明和文档

[dependencies]
parasailors = "0.3"

使用相同身份替换矩阵的简短使用示例(尽管 PAM 和 BLOSUM 也可用)

use parasailors::*;

// everything operates on &[u8] to avoid copying and reparsing
// this is the format that rust-bio provides when parsing FASTA/FASTQ
let query_sequence = b"AAAAAAAAAA";
let reference = b"AAAAAAAAAACCCCCCCCCCGGGGGGGGGGTTTTTTTTTTTNNNNNNNNN";

// the MatrixType enum allows us to type-safely select which matrix to use
let identity_matrix = Matrix::new(MatrixType::Identity);

// profiles can be reused across many alignments, saving overhead
let profile = Profile::new(query_sequence, &identity_matrix);

// parasail provides us with fast implementations for multiple alignment types
assert_eq!(10, local_alignment_score(&profile, reference, 1, 1));
assert_eq!(10, semi_global_alignment_score(&profile, reference, 1, 1));
assert_eq!(-30, global_alignment_score(&profile, reference, 1, 1));

查看文档获取更多使用示例.

功能/待办事项

  • 重新使用配置文件比对的分数
  • 多种不同替换矩阵的安全使用
  • 快速一次性比对函数,可自动创建配置文件
  • 间隙统计计算
  • CIGAR 字符串
  • 返回动态规划矩阵的行和列以进行进一步计算
  • 手动选择要使用的 SIMD 功能
  • 手动选择算法实现(条纹、扫描、对角线、分块)
  • 手动选择整数位宽
  • 编译时创建未包含的替换矩阵

需求

使用FFI绑定的子模块(parasail_sys)使用autotools构建C库(据我所知,没有关于parasail的发行版软件包),因此您需要一个兼容的工具链。建议在具有与目标机器类似SIMD指令集的系统上构建(理想情况下是目标机器本身)。parasail C库在功能检测方面通常做得很好,但您的编译器可能会拒绝为不在其上运行的架构生成向量指令,这可能会降低一些性能。

贡献、问题和反馈

非常欢迎贡献,尤其是如果您比我更熟悉C(很可能)或生物信息学(也很可能)。我鼓励您在GitHub问题中提交任何错误报告或请求,并且我很乐意审查任何拉取请求。

如果您的问题与错误或请求的功能无关,请通过电子邮件联系我或在Rust IRC频道中找到我(通常在#rust#rust-beginners,昵称与GitHub用户名相同)。

许可

这里的所有Rust代码都根据MIT许可授权。然而,位于parasail_sys/parasail_c下的代码不属于我,其遵循Batelle BSD风格许可

引用

如有需要,请引用parasail的原始论文。

Daily, Jeff. (2016). Parasail: SIMD C library for global, semi-global, and local pairwise sequence alignments. BMC Bioinformatics, 17(1), 1-11. doi:10.1186/s12859-016-0930-z

http://dx.doi.org/10.1186/s12859-016-0930-z

我对这些算法的良好实现不承担任何责任,并且我认为如果这个crate在学术环境中使用,原始作者应该得到奖励。

依赖关系