使用cpu如何加速linux命令?

2021-07-27 01:57:50 字數 1758 閱讀 6015

我們都知道

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的使...