私はシェルスクリプトを持っています
- 大きなテキストファイル(600万行、6列)をシャッフルします。
- 最初の列に基づいてファイルをソートします
- 1000個のファイルを出力する
擬似コードは次のようになります
file1.sh
#!/bin/bash
for i in $(seq 1 1000)
do
Generating random numbers here , sorting and outputting to file$i.txt
done
parallel
このシェル スクリプトを実行してマルチコア CPU を最大限に活用する方法はありますか?
現時点では、/file1.sh
1 から 1000 まで順番に実行されており、非常に遅いです。
ご協力いただきありがとうございます。
ベストアンサー1
もう一つの非常に便利な方法は、GNU パラレルまだインストールしていない場合はインストールする価値があります。タスクに必ずしも同じ時間がかかるわけではない場合、これは非常に貴重です。
seq 1000 | parallel -j 8 --workdir $PWD ./myrun {}
./myrun 1
、などを起動し./myrun 2
、一度に8つのジョブが実行されるようにします。また、PBSジョブなどで複数のノードで同時に実行したい場合は、ノードのリストを取得することもできます。システムでこれを行う方法については、ユーザー向けの説明をご覧ください。ここ。
追加情報: 更新しました:moreutilsパッケージに含まれる同じ名前のより限定されたユーティリティではなく、gnu-parallelを使用していることを確認してください(2つの異なる歴史については、ここ。