2012-10-05 50 views
1

我有一個C程序fextract,它以wavfile作爲輸入並以某種fcc格式輸出。語法如下所示:'fextract file.wav文件。 FCC」。現在我有75000個wav文件需要轉換成fcc格式。加快我計劃使用我的i7機器的所有核心的程序。首先我將所有輸入和輸出路徑保存在一個文件中,我稱之爲scp文件 例如:/mnt/disk1/file1.wav /mnt/disk2/file1.fcc /mnt/disk1/file2.wav/mnt /disk2/file2.fcc 等如何在shell腳本中使用多核(i7機器)運行ac程序

現在用下面的shell腳本我有devided的SCP文件到8個文件,並存儲在一個臨時目錄

mkdir $tmpDir 
cd $tmpDir 

nCores=`cat /proc/cpuinfo | grep processor | wc -l` 
nLines=`cat $scpFile|wc -l` 

split -l $((nLines/nCores + 1)) $scpFile 

現在我的臨時文件有八個子文件。我如何評估他們運行使用多個核心的程序fextract

for i in `ls` 
do 

fextract &i 

done 

需要這些類型的東西。請幫我解決這個迫切的

回答

2

使用GNU並行:

parallel -j $nCores fextract -- `ls` 

或者你可以使用xargs與-P鍵(與find有用)。

這些命令將在多個線程中啓動您的代碼,這將允許它們在多個內核上執行。

+0

提示:在Ubuntu上,您需要'sudo apt-get install moreutils'才能使用此程序。 – bohney

+0

你可以更具體地請,因爲我的LS會給我8個文件,並在文件中的每一行包含輸入和輸出路徑。所以我如何使用並行命令實現該功能 – user1540393

+0

http://tinyogg.com/watch/TORaR/ – Pablo

0

使用GNU並行:

cat filenames | parallel fextract {} {.}.fcc 

正如一些時間花費在磁盤I/O可能會更快的運行速度比1多一點每個CPU核心:如果你只是

cat filenames | parallel -j150% {} {.}.fcc 

想要當前目錄中的所有文件:

parallel -j150% {} {.}.fcc ::: *.wav 

如果您想在輸入和輸出文件名都分隔一行通過空間,您可以使用:

cat filenames_2_per_line | parallel --colsep ' ' -j150% {1} {2} 

如果文件名是不是在同一行,但之後對方,那麼你需要在一次讀取2行:

cat filenames_interleaved | parallel -N2 -j150% {1} {2} 

手錶的介紹視頻瞭解更多:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

相關問題