顯示具有 Parallel平行處理 標籤的文章。 顯示所有文章
顯示具有 Parallel平行處理 標籤的文章。 顯示所有文章

2023年11月24日 星期五

調整多核心數目,編譯MacPorts上的軟體

預設MacPorts在編譯軟體的時候,會使用所有的核心,設定放在/opt/local/etc/macports/macports.conf,設定則是:

  • buildmakejobs    0 

這時候可以調整數目,像只想要用8個核心編譯則可以把設定改成下面:

2021年12月31日 星期五

指令裡面的dash - 代表標準輸入

在指令裡面,dash (-, 通常是按鍵0右邊那個)代表的是標準輸入(standard input):

  1. cat ERR194147.fastq.gz | pv | time seqtk fqchk -q 30 - 
  2. zcat ERR194147.fastq.gz | pv | time seqtk fqchk -q 30 -
  3. unpigz -p 4 -c ERR194147.fastq.gz | pv | time seqtk fqchk -q 30 -

2019年1月15日 星期二

鏡像站搭配多核心來加速R套件的編譯

R語言的套件安裝的時候,通常會需要編譯。這時候除了選擇GCC以外,還可以設定使用多核心來加速編譯的過程。只要在 ~/.R/Makevars 這個檔案裡面加入:
  • MAKEFLAGS = -j8
就可以使用8個執行緒來編譯,這個數字可以調整。
另一種解法則是在 ~/.Rprofile 裡面加入:
  • options(Ncpus = 8)

2018年9月25日 星期二

比較MPI與OpenMP的差異

會有MPI與OpenMP的差異起因於:
  • 以前的主機只有單CPU,為了要讓程式可以透過網路在不同的主機上面平行處理,因此發展出了 MPI
  • 後來CPU從單核心變成的多核心,為了讓程式可以在單機多核心上面平行處理,因此發展出了 OpenMP
  • 現代的機器已經是多CPU多核心,所以出現了 Hybrid OpenMP+MPI,先透過MPI將大工作分成小工作平行給不同的CPU,再透過OpenMP將這些小工作分成執行緒平分給不同的核心去執行
不管是上述的哪一種,都是讓平行化程式的解法

2018年3月5日 星期一

GROMACS mdrun平行處理與GPU加速

GROMACS執行分子模擬的程式叫做mdrun,要加速模擬速度除了平行處理(parallelization)還可以用GPU加速,官方的參考資料如下:

2017年10月22日 星期日

find加xargs來處理檔案

用find找到檔案後,再用xargs來處理檔案:
  1. find . -type f | xargs -n1 md5
  2. find . -type f | xargs -n1 -t md5
  3. find . -type f | xargs -n1 -p md5
上面三個指令都一樣,計算所在資料夾下面檔案的MD5雜湊值。差別就是-t可以看到執行前的指令,-p是執行每個指令前都會問要不要做。

2017年8月9日 星期三

讓sort用多核心跑

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



2017年1月11日 星期三

tee將STDOUT同時送給多個指令處理

同一個檔案的內容,同時有多個不同程式要來處理,可以直接用tee這個指令搭配process substitution來做:
  • cat file.txt | tee >(command1) >(command2) >(command3) | wc -l

2016年11月17日 星期四

用tar打包很多個檔案的技巧

用tar打包某些檔案通常只要輸入
  • tar cf x.tar *
但若是檔案很多的時候,會出現arguments too long之類的錯誤訊息。最簡單的解法是打包這些檔案所在的資料夾。不過也可以用下面這個方式來處理:
  1. find . -name "*" > ../folder.list
  2. tar -I ../folder.list -cf > ../folder.tar
  3. tar -I ../folder.list -cf - | pigz -p 4 > ../folder.tgz

2016年10月10日 星期一

讓R語言的迴圈跑平行處理

R語言中,可以用foreach搭配doMC這兩個套件來完成迴圈的平行化,程式碼如下:
rm(list = ls())
install.packages("foreach")
install.packages("doMC")
library(foreach)
library(doMC)
registerDoMC(4)     # Number of CPU cores used in parallel computing

### for loop, using single CPU core ###
df <- data.frame()
for(i in 1:10) {
    Sys.sleep(1)
    df <- rbind(df, data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i))
}

### foreach loop, using single CPU core ###
dfs <- foreach(i=1:10, .combine=rbind) %do% {
    Sys.sleep(1)
    data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i)
}
identical(df, dfs)

### foreach loop, using multiple CPU cores ###
dfp <- foreach(i=1:10, .combine=rbind) %dopar% {
    Sys.sleep(1)
    data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i)
}
identical(df, dfp)