文档首页 > > 移植指南> 移植racon

移植racon

分享
更新时间:2020/08/06 GMT+08:00

介绍

简要介绍

racon是一款在Github上发布的C++开源软件,用于对一些不产生consensus的快速组装软件组装得到的原始contig序列的纠错,生成基因组一致性序列,同时支持Pacbio和Oxford Nanopore测序数据。

racon共计12个release版本,最新版本为1.3.2,可通过git clone master分支代码下载。编译racon软件需要的依赖gcc 4.8+和cmake 3.2+。racon软件使用了SSE指令及spoa组件,代码里使用了x86的avx256指令,ARM架构服务器不支持SSE指令,需要用ARM的neon头文件进行neon矢量化指令进行替换,但经测算,替换指令后软件性能降低非常大,因此ARM上编译时,需要进行优化。

语言:C/C++

一句话描述:三代基因测序纠错软件

开源协议:MIT

建议的版本

建议通过git下载最新版本。

环境要求

云服务器要求

本文以云服务器KC1实例测试,云服务器配置如表1所示。

表1 云服务器配置

项目

说明

规格

kc1.large.2 | 2vCPUs | 4GB

磁盘

系统盘:高IO(40GB)

操作系统要求

操作系统要求如表2所示。

表2 操作系统要求

项目

说明

下载地址

CentOS

7.6

在公共镜像中已提供。

Kernel

4.14.0-115

在公共镜像中已提供。

配置编译环境

安装wget和cmake工具。

yum install cmake3 wget -y

获取源码

获取“racon”源码包。

cd /usr/local/src

git clone --recursive https://github.com/isovic/racon.git racon

编译和安装

  1. 进入racon的文件目录。

    cd /usr/local/src/racon

  2. 修改racon编译参数。

    Centos7.6中默认使用的gcc-4.8.5不支持通过“-march=native”的配置,来自动识别CPU类型和指令集,需要修改为“-march=armv8-a”

    1. 修改当前目录下的“CMakeLists.txt”

      vi CMakeLists.txt

      修改下述内容:

      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")

      修改后为:

      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -march=armv8-a")

      图1所示,保存并退出。

      图1 修改当前目录下的“CMakeLists.txt”
    2. 修改“spoa”目录下的“CMakeLists.txt”

      vi ./vendor/spoa/CMakeLists.txt

      修改下述内容:

      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -march=native")

      修改后为:

      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -march=armv8-a")

      图2所示,保存并退出。

      图2 修改“spoa”目录下的“CMakeLists.txt”
    3. 修改“thread_pool”目录下的“CMakeLists.txt”

      vi ./vendor/thread_pool/CMakeLists.txt

      修改下述内容:

      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -march=native")

      修改后为:

      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -march=armv8-a")

      图3所示,保存并退出。

      图3 修改“thread_pool”目录下的“CMakeLists.txt”

  3. 优化racon源码。

    1. “./src/main.cpp”下的“int32_t argument;” 改为“int argument;”

      vi ./src/main.cpp

      修改如图4所示,修改完成后,保存退出。

      图4 修改“./src”目录下的“main.cpp”
    2. “./vendor/rampler/src/main.cpp”下的“char argument;”改为“int argument;”

      vi ./vendor/rampler/src/main.cpp

      修改如图5所示,修改完成后,保存退出。

      图5 修改“./vendor/rampler/src/”目录下的“main.cpp”
    3. “./vendor/spoa/src/main.cpp”下的“char opt; ”改为“int opt;”

      vi ./vendor/spoa/src/main.cpp

      修改如图6所示,修改完成后,保存退出。

      图6 修改“./vendor/spoa/src/”目录下的“main.cpp”

  4. 添加关于aarch64的宏定义。

    cd /usr/local/src/racon

    sed -i 's/#if defined(__AVX2__) || defined(__SSE4_1__)$/#if defined(__AVX2__) || defined(__SSE4_1__) || defined(__aarch64__)/' ./vendor/spoa/src/simd_alignment_engine.cpp

    sed -i 's/#elif defined(__SSE4_1__)$/#elif defined(__SSE4_1__) || defined(__aarch64__)/' ./vendor/spoa/src/simd_alignment_engine.cpp

  5. 下载“sse2neon.h”,使用此头文件替换sse。

    由于在X86上指令优化用的是SSE,在鲲鹏下使用是neon,因此下载“sse2neon.h”,使用此头文件替换sse。

    wget https://github.com/jratcliff63367/sse2neon/archive/master.zip

    unzip master.zip

    mv ./sse2neon-master/SSE2NEON.h ./sse2neon-master/sse2neon.h

    cp ./sse2neon-master/sse2neon.h ./vendor/spoa/src/

  6. 引入“sse2neon.h”头文件。

    修改“./vendor/spoa/src/simd_alignment_engine.cpp”源码,引入“sse2neon.h”头文件。

    vi ./vendor/spoa/src/simd_alignment_engine.cpp

    修改如图7所示,修改完成后,保存退出。

    图7 修改“./vendor/spoa/src/”目录下的“simd_alignment_engine.cpp”

  7. 编译racon。

    cd /usr/local/src/racon

    mkdir build

    cd build

    cmake3 -DCMAKE_BUILD_TYPE=Release ..

    make && make install

运行和验证

测试racon。

racon --version

回显内容如下,表示安装正常。
v1.4.3
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问