DNASequence/README.md

121 lines
5.0 KiB
Markdown
Raw Normal View History

2024-09-19 02:52:17 +00:00
# 注意!
2024-09-20 02:03:22 +00:00
> 输入的时候麻烦最后一行的换行别删
2024-09-20 07:47:58 +00:00
2024-09-20 01:33:45 +00:00
## 项目前置
2024-09-20 02:03:22 +00:00
2024-09-20 02:59:40 +00:00
> 如果你想在没有安装Visual Studio的电脑上使用编译后的代码请前往下面的网址安装VCRuntime
2024-09-20 04:02:16 +00:00
>
> 需要的windows dll在dll文件夹中可以试试
2024-09-20 02:59:40 +00:00
[https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022](https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022)
2024-09-20 02:03:22 +00:00
> 本项目使用了OpenMP进行并行化加速默认开启OpenMP在C++编译器中默认都装了的,请使用较新的编译器
> 在win平台上似乎无法使用mingw对OpenMP加速但是Visual StudioMSVC 和 Clang 在win平台上都是可以编译的
> 不要使用Mingw编译win上可以使用Clang,VS(MSVC)linux上使用gcc(g++)即可
## 块内存大小默认4G如有更多请更改
2024-09-20 01:40:19 +00:00
```cpp
//原理是这里定义处理函数将函数传入dna::open_file_and_calculate在open_file_and_calculate中会调用传入的函数
//参数列表 <文件分块内存大小单个DNA序列最长大小>("输入文件名","输出文件名",序列处理函数);
//这个函数在src/tools/dna里面
dna::open_file_and_calculate<(size_t)4 * 1024 * 1024 *1024 , (size_t)5e4+5>("filteredReads.txt", "reversedSequence.txt",reverseComplement);
```
2024-09-19 02:52:17 +00:00
2024-09-20 01:33:45 +00:00
## ***请详细阅读xmake.lua项目配置文件可能涉及到性能优化和计算精度的问题***
2024-09-20 02:03:22 +00:00
2024-09-19 03:01:33 +00:00
> 最好不要使用mingw使用mingw+clang(就是clang)或者msvc(visual studio)
>
> mingw的IO优化不行
2024-09-19 02:52:17 +00:00
2024-09-18 06:52:32 +00:00
# DNASequence
2024-09-18 09:21:55 +00:00
[提问者问题原文链接](https://www.zhihu.com/question/36143261/answer/3624848144)
2024-09-18 09:23:24 +00:00
## 代码逻辑介绍
2024-09-18 09:21:55 +00:00
DNASequence处理
DNA是双链的互为互补链对DNA样本进行测序时不能确认测出的是哪条链所以就把所有DNA片段的互补链全算出来和原文件放在一起组装。
2024-09-19 02:27:29 +00:00
> 输入格式只是演示样例不保证其生物上的准确性默认最大dna序列长度支持5e4可自行修改代码扩容
2024-09-19 02:29:22 +00:00
>
2024-09-19 05:50:29 +00:00
> 程序将会从项目的根目录中打开filteredReads.txt并处理类似以下若干条dna序列
2024-09-19 02:27:29 +00:00
```
@SRR13280199.1 1 length=32
ACGTACACATTGCTGTCTGCTGAACCACCTAG
2024-09-19 05:50:29 +00:00
@SRR13280199.1 2 length=32
ACGTACACATTGCTGTCTGCTGAACCACCTAG
2024-09-19 02:27:29 +00:00
```
2024-09-18 09:27:32 +00:00
## 关于如何构建本项目
> 请确保安装了构建工具xmake和任意C++构建工具并将路径添加到了PATH目录
[如何安装xmake?链接](https://gitee.com/tboox/xmake#%E5%AE%89%E8%A3%85)
```bash
2024-09-18 10:47:32 +00:00
#编译 -v 表示 verbose 输出详细编译信息具体说明去上面的xmake链接看看
2024-09-18 09:27:32 +00:00
xmake -v
# 运行
xmake r
2024-09-18 10:47:32 +00:00
2024-09-18 10:48:56 +00:00
# 生成 visual studio 文件夹点进去打开sln文件即可使用visual studio编辑和调试很方便
2024-09-18 10:47:32 +00:00
xmake project -k vsxmake
2024-09-18 09:27:32 +00:00
```
2024-09-18 11:15:24 +00:00
2024-09-18 10:59:30 +00:00
## 性能展示
2024-09-19 02:15:54 +00:00
> 什么环境下性能最好?
2024-09-20 03:13:26 +00:00
> 经过测试在windows环境下Visual Studio编译性能最好
2024-09-19 02:15:54 +00:00
2024-09-18 11:15:24 +00:00
> perf
```
2024-09-20 02:39:14 +00:00
31.88% test test [.] reverseComplement(char*, char*) [clone ._omp_fn.1]
10.27% test [unknown] [k] 0xffffffffc06abd30
7.32% test libgomp.so.1.0.0 [.] 0x0000000000024c6a
4.39% test [unknown] [k] 0xffffffffa84435e1
3.32% test libgomp.so.1.0.0 [.] 0x0000000000024ab2
3.20% test [unknown] [k] 0xffffffffa8443ee5
2.35% test [unknown] [k] 0xffffffffa72d138b
2.30% test [unknown] [k] 0xffffffffa7309ed4
1.98% test [unknown] [k] 0xffffffffa7a5ba37
1.74% test [unknown] [k] 0xffffffffa760ecee
1.63% test test [.] reverseComplement(char*, char*) [clone ._omp_fn.0]
1.48% test [unknown] [k] 0xffffffffa83ab787
1.32% test [unknown] [k] 0xffffffffa842aee0
1.31% test [unknown] [k] 0xffffffffa766d76a
0.83% test [unknown] [k] 0xffffffffa7a5ad88
0.80% test libc.so.6 [.] __memset_evex_unaligned_erms
0.55% test [unknown] [k] 0xffffffffa766d747
0.47% test [unknown] [k] 0xffffffffa76c08f8
2024-09-18 11:15:24 +00:00
```
> 800MB fastq DNA 序列处理性能展示
```
Open input file stream to value [input_file_stream] ok , from ["filteredReads.txt"]
Open output file stream to value [output_file_stream] ok , from ["reversedSequence.txt"]
2024-09-20 02:39:14 +00:00
Chunk size :4294967296 bytes
[Timer: All spent] Start timing
[Timer: chunk_id:[1]] Start timing
[Timer: read_chunk_id:[1]] Start timing
2024-09-20 03:53:20 +00:00
[Timer: read_chunk_id:[1]] Stop timing , used 1031ms
2024-09-20 02:39:14 +00:00
buf_len : 897963094
[Timer: calculate_chunk_id:[1]] Start timing
omp_get_num_threads() : 12
2024-09-20 03:53:20 +00:00
[Timer: calculate_chunk_id:[1]] Stop timing , used 277ms
2024-09-20 02:39:14 +00:00
[Timer: write_chunk_id:[1] , [Wrote bytes] start_pos : 897963094] Start timing
2024-09-20 03:53:20 +00:00
[Timer: write_chunk_id:[1] , [Wrote bytes] start_pos : 897963094] Stop timing , used 1169ms
[Timer: chunk_id:[1]] Stop timing , used 2479ms
[Timer: All spent] Stop timing , used 2479ms
2024-09-18 11:15:24 +00:00
```
2024-09-18 09:27:32 +00:00
2024-09-18 09:23:24 +00:00
## 关于版权
2024-09-19 02:29:22 +00:00
本项目算法版权归提问者所有,可不遵循开源协议,其它人使用请遵循开源协议,或者欢迎咨询我