タグ付けされた質問 「gnu-parallel」

10
Bash FORループの並列化
GNU Parallelを使用して、次のスクリプト、特に3つのFORループインスタンスのそれぞれを並列化しようとしましたが、できませんでした。FORループ内に含まれる4つのコマンドは連続して実行され、各ループには約10分かかります。 #!/bin/bash kar='KAR5' runList='run2 run3 run4' mkdir normFunc for run in $runList do fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 fsl5.0-flirt -in $run".poststats.nii.gz" -ref $kar"deformed.nii.gz" -omat $run".norm2.mat" -bins 256 -cost corratio -searchrx -90 90 …

1
GNUパラレルvs&(バックグラウンドを意味する)vs xargs -P
.shスクリプトで一連のタスクを実行することの違いまたは利点(ある場合)を使用して混乱しているGNU parallel 例えば、Ole Tangeの答え: parallel ./pngout -s0 {} R{} ::: *.png それらをループしてバックグラウンドに置くと言うよりも&。 例えばfrostschutzの答え: #copied from the link for illustration for stuff in things do ( something with stuff ) & done wait # for all the something with stuff 要するに、それらは単に構文的または実際的に異なっていますか?そして、実際に異なる場合、それぞれをいつ使用する必要がありますか?

6
GNU Parallelを使用してrsyncを並列化する
rsyncスクリプトを使用して、あるホストのデータを別のホストのデータと同期させています。データには、ほぼ1.2 TBに寄与する多数の小さなサイズのファイルがあります。 これらのファイルを同期するためにrsync、次のコマンドを使用しています。 rsync -avzm --stats --human-readable --include-from proj.lst /data/projects REMOTEHOST:/data/ proj.lstの内容は次のとおりです。 + proj1 + proj1/* + proj1/*/* + proj1/*/*/*.tar + proj1/*/*/*.pdf + proj2 + proj2/* + proj2/*/* + proj2/*/*/*.tar + proj2/*/*/*.pdf ... ... ... - * テストとして、これらのプロジェクトのうち2つ(8.5GBのデータ)を選択し、上記のコマンドを実行しました。順次プロセスであるため、完了までに14分58秒かかります。したがって、1.2TBのデータの場合、数時間かかります。 複数のrsyncプロセスを並列に実行できる場合(&、xargsまたはを使用parallel)、時間を節約できます。 私はparallel(cdソースディレクトリにingした後)で以下のコマンドで試しましたが、実行に12分37秒かかりました: parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ …

6
並列を使用して一意の入力ファイルを一意の出力ファイルに処理する
入力ファイル(各ファイルに多数の入力行が含まれる)でいっぱいのディレクトリが指定されているシェルスクリプトの問題があり、それらを個別に処理し、各出力を一意のファイル(別名、file_1.inputのニーズ)にリダイレクトする必要がありますfile_1.outputなどにキャプチャされます)。 事前並列処理では、ディレクトリ内の各ファイルを反復処理してコマンドを実行しますが、プロセッサを圧倒しないように何らかのタイマー/カウント手法を実行します(各プロセスのランタイムが一定であると仮定)。ただし、常にそうなるとは限らないため、カスタムコードを記述せずにシェルスクリプトのマルチスレッド化を実現するには、「並列」のようなソリューションを使用するのが最善の方法と思われます。 これらの各ファイルを処理するために並行して実行する(およびコアを効率的に管理できるようにする)方法をいくつか考えましたが、それらはすべてハックのようです。私は非常に簡単なユースケースだと思うものを持っているので、可能な限りきれいに保つことを好むでしょう(そして並列の例では何も私の問題であるとは思えません)。 助けていただければ幸いです! 入力ディレクトリの例: > ls -l input_files/ total 13355 location1.txt location2.txt location3.txt location4.txt location5.txt スクリプト: > cat proces_script.sh #!/bin/sh customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile] 更新:以下のOleの答えを読んだ後、自分の並列実装のために足りない部分をまとめることができました。彼の答えは素晴らしいですが、私が追加した研究とメモは次のとおりです。 完全なプロセスを実行する代わりに、概念実証コマンドから始めて、自分の環境で彼のソリューションを証明しようと考えました。私の2つの異なる実装(およびメモ)を参照してください。 find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out find(lsではなく、問題を引き起こす可能性があります)を使用して、入力ファイルディレクトリ内のすべての適用可能なファイルを検索し、その内容を別のディレクトリとファイルにリダイレクトします。上記の私の問題は読み取りとリダイレクトでした(実際のスクリプトは単純でした)ので、スクリプトをcatに置き換えることは概念の立証でした。 parallel cat '>' …

2
なぜ(GNU?)並列が静かに失敗するのですか?どうすれば修正できますか?
いくつかのシミュレーションデータを後処理する大きなスクリプトでは、次の行がありました。 parallel bnzip2 -- *.bz2 私がparallel正しく理解していれば(そうでないかもしれませんが)、リストされた拡張子を持つすべてのファイルに対してプログラムのnコアスレッドを実行する必要があります。あなたは私がコマンドのつづりを間違えたことに気付くかもしれませんbunzip2。ここでは警告またはエラーメッセージが表示されますが、静かに失敗します。これは意図したものですか?将来的にこれに少しもらわれないようにするにはどうすればよいですか? 更新: 私が考えているものとは異なるものがparallelインストールされている可能性があります: > parallel --version` parallel: invalid option -- '-' parallel [OPTIONS] command -- arguments for each argument, run command with argument, in parallel parallel [OPTIONS] -- commands run specified commands in parallel parallel私のシステムののmanページは以下を提供します: parallel(1) parallel(1) NAME parallel - run programs in parallel .... …



4
スプリットでGNU Parallelを使用する
かなり巨大なファイルをpostgresqlデータベースにロードしています。このI最初の使用を行うにはsplit小さいファイル(30GBごと)を取得するためにファイルにして、私が使用してデータベースにそれぞれの小さなファイルをロードGNU Parallelしてpsql copy。 問題は、ファイルを分割するのに約7時間かかり、コアごとにファイルのロードを開始することです。私が必要なのはsplit、ファイルの書き込みが終了するたびにファイル名をstd出力に出力して、パイプParallel処理を行い、split書き込みが終了したときにファイルのロードを開始するように指示する方法です。このようなもの: split -l 50000000 2011.psv carga/2011_ | parallel ./carga_postgres.sh {} splitマニュアルページを読みましたが、何も見つかりません。splitまたは他のツールでこれを行う方法はありますか?

3
GNU Parallelを効果的に使用する方法
圧縮されたテキストファイルですべての一致を検索するとします。 $ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern pv --rateパイプのスループットを測定するためにここで使用されます。私のマシンでは、約420Mb / s(解凍後)です。 現在、GNUパラレルを使用してパラレルgrepを実行しようとしています。 $ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern 現在、スループットは〜260Mb / sに低下しています。そして、より興味深いparallelプロセス自体は、多くのCPUを使用しています。grepプロセスより多い(ただし未満gzcat)。 編集1:私はさまざまなブロックサイズ(--block)と-N/ -Lオプションのさまざまな値を試しました。この時点では何も助けになりません。 何が悪いのですか?

2
kshに実装された貧乏人のGNU Parallel?
私は、GNU Parallelの機能を使用して、コマンドとそれが並列に供給されるリストを実行し、すべての完了後にそれを吐き出すことができるようにしたいのですが、すべてのサーバーにGNU Parallelをインストールしたくありません。 または、おそらく並列バージョンxargsですか? GNU Parallelが行うことのksh実装はありますか?この場合、すべての出力をパイプまたは格納できる限り、GNU Parallelのように順番に実行する必要はありません。一時ファイルの使用も避けたいです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.