我們都知道
linux系統
中grep, bzip2, wc, awk, sed等等,都是單執行緒的,只能使用乙個cpu核心。那麼如何才能使用這些核心?
要想讓linux命令使用所有的cpu核心,我們需要用到gnu parallel命令,它讓我們所有的cpu核心在單機內做神奇的map-reduce操作,當然,這還要借助很少用到的–pipes 引數(也叫做–spreadstdin)。這樣,你的負載就會平均分配到各cpu上,真的。
bzip2
bzip2是比gzip更好的壓縮工具,但它很慢!別折騰了,我們有辦法解決這問題。
以前的做法:
cat bigfile.bin | bzip2 --best > compressedfile.bz2
現在這樣:
catbigfile.bin | parallel --pipe --recend '' -k bzip2 --best > compressedfile.bz2
尤其是針對bzip2,gnu parallel在多核cpu上是超級的快。你一不留神,它就執行完成了。
grep
greppattern bigfile.txt
現在你可以這樣:
catbigfile.txt | parallel --pipegrep'pattern'
或者這樣:
catbigfile.txt | parallel --block 10m --pipegrep'pattern'
這第二種用法使用了 –block 10m引數,這是說每個核心處理1千萬行——你可以用這個引數來調整每個cup核心處理多少行資料。
awk
下面是乙個用awk命令計算乙個非常大的資料檔案的例子。
常規用法:
catrands20m.txt | awk ' end '
現在這樣:
cat rands20m.txt | parallel --pipe awk \\' end \\' | awk ' end '
這個有點複雜:parallel命令中的–pipe引數將cat輸出分成多個塊分派給awk呼叫,形成了很多子計算操作。這些子計算經過第二個管道進入了同乙個awk命令,從而輸出最終結果。第乙個awk有三個反斜槓,這是gnu parallel呼叫awk的需要。
wc
想要最快的速度計算乙個檔案的行數嗎?
傳統做法:
wc-l bigfile.txt
現在你應該這樣:
catbigfile.txt | parallel --pipe wc -l | awk ' end '
sed
想在乙個巨大的檔案裡使用sed命令做大量的替換操作嗎?
常規做法:
seds^old^new^g bigfile.txt
現在你可以:
catbigfile.txt | parallel --pipe sed s^old^new^g
…然後你可以使用管道把輸出儲存到指定的檔案裡。
51cto
使用CUDA加速CPU程式的步驟
通過效能分析工具 如vs 找到cpu程式最耗時的多個地方,並確定耗時程式的入口函式 將cpu函式進行清理 1.將迴圈部分的 找出來。2.將函式內所用到的資料從c 類結構變成c的結構體。3.標準化輸入輸出,保證其為c結構,並與原程式的資料進行無縫對接。4.將迴圈內部的函式也做相同處理,最終得到c版本的...
使用mkldnn為cpu執行網路加速
最近要在用crnn,跑的pytorch模型,本來在gpu跑的好好的,但是後來由於各種原因,需要在cpu上跑,才發現cpu上跑的是真的慢,後來發現了mkldnn這個東西,這是intel開發的開源專案,就是針對cpu上執行神經網路做了一些並行優化。用了以後,大概速度快了7,8倍吧,效果還是比較明顯的。g...
Linux 如何佔滿CPU使用率
1.ubuntu平台 cpuburn cpu burn 官網 在介紹cpuburn時,提到cpuburn只能執行在x86結構cpu上。ps 因為我的裝置是android裝置,沒有去嘗試cpuburn。有興趣的同學可以自己嘗試一下cpuburn是否可以執行在android裝置上。關於cpuburn的使...