2017年8月9日 星期三

讓sort用多核心跑

GNU sort(就是在Linux裡面預設的,作者是Mike Haertel與Paul Eggert),裡面有個平行化的選項,如果不選的話預設就會開多核心。這邊測試《PDB中最常出現的氨基酸片段》裡面排序進一億筆5-mer,得到的速度與用單核心來比較



指令如下:
  1. cat pdb_seqres.txt | grep -e "mol:protein" -A 1 \
    | sed '/^--$/d' | grep -v "^>" \
    | awk '{while(length($0)>=5){print substr($0,1,5);gsub(/^./,"")}}' \
    | grep X -v \
    > prot_5peptide.count
  2. time sort --parallel=1 prot_5peptide.count > prot_5peptide.count.sort1
  3. time sort --parallel=2 prot_5peptide.count > prot_5peptide.count.sort2
  4. time sort --parallel=4 prot_5peptide.count > prot_5peptide.count.sort4
  5. time sort --parallel=6 prot_5peptide.count > prot_5peptide.count.sort6
  6. time sort --parallel=8 prot_5peptide.count > prot_5peptide.count.sort8
  7. time sort --parallel=12 prot_5peptide.count > prot_5peptide.count.sort12
  8. time sort --parallel=16 prot_5peptide.count > prot_5peptide.count.sort16
  9. time sort --parallel=24 prot_5peptide.count > prot_5peptide.count.sort24
  10. time sort --parallel=32 prot_5peptide.count > prot_5peptide.count.sort32
以使用16核心平行化sort的時候,用top觀察會發現一開始%CPU會衝到1600%,但很快地就會掉下來變成約800%、400%、200%、100%、400 %,然後就在100~400%之間跳來跳去。速度比較請參考下圖:

整體的速度大約到八核心以後就不太下降,也就是排序一億筆資料八核心約莫花120秒左右、但增加到16、24、32核心整體時間也約莫就只少20秒~


參考資料

_EOF_

沒有留言:

張貼留言