2015-10-03 19 views
1

我有一個Perl程序,需要兩個參數的 英語單詞每行一個組成字典文件,並與串聯詞每 還行之一,像這樣的文件:運行命令平行

lovetoplayguitar 
... 
... 

所以通常使用的程序,如:

perl ./splitwords.pl words-en.txt bigfile.txt 

它打印結果stdout

我試圖把它通過GNU parallel這樣的:

time parallel -n 2 -j8 -k perl ./splitwords.pl {1} {2} ::: words-en.txt bigfile.txt > splitted.txt 

,但它不工作的方式..試了很多組合,但迄今爲止未能 使用並行運行它。

編輯

其實這似乎是工作,但它僅使用一個核心..?爲什麼..?

+0

你期望GNU並行運行? GNU Parallel不能神奇地並行化你的程序,但它可以用不同的參數運行你的程序的多個副本。你期望它能運行你的程序有哪些論據? –

+0

這是我正面臨的一個問題,因爲兩個參數是兩個文件名,它們被傳遞給./splitwords.pl程序,所以它只接受那兩個,它們是相同的 – branquito

+0

如果你不知道如何分割你的任務分成更小的任務,那麼GNU Parallel就不可能爲你做:它無法猜測如何並行化任務。看起來你認爲這個任務可以並行化,你能解釋一下如何將任務分成更小的工作嗎? –

回答

1

這將砍大文件到1 MB塊:

cat bigfile.txt | parallel --pipe --cat -k perl ./splitwords.pl words-en.txt {} 

如果perlscript只讀取該文件,那麼這將是更快:

cat bigfile.txt | parallel --pipe --fifo -k perl ./splitwords.pl words-en.txt {} 
+0

yes只接受文件作爲參數,所以第二個參數一。 – branquito

+0

so --fifo就像命名管道? – branquito

+1

是:--fifo創建一個命名管道(在GNU並行退出時將被刪除)。 –