タグ付けされた質問 「parallelism」

複数のプロセッサを利用するためのタスクの並列実行

15
多くのサーバーでSSH経由でコマンドを自動的に実行する
.txtファイルにはIPアドレスのリストがあります。例: 1.1.1.1 2.2.2.2 3.3.3.3 すべてのIPアドレスの背後にサーバーがあり、すべてのサーバーでポート22で実行されているsshdがあります。すべてのサーバーがknown_hostsリストにあるわけではありません(私のPCではUbuntu 10.04 LTS / bash)。 これらのサーバーでコマンドを実行し、出力を収集するにはどうすればよいですか? 理想的には、すべてのサーバーでコマンドを並行して実行したいと思います。 すべてのサーバーで公開鍵認証を使用します。 潜在的な落とし穴を次に示します。 sshは、指定されたサーバーのsshキーをknown_hostsファイルに入れるように促します。 指定されたコマンドは、出力が潜在的に無効であることを示すゼロ以外の終了コードを返す場合があります。私はそれを認識する必要があります。 たとえば、ネットワークエラーが原因で、特定のサーバーへの接続の確立に失敗する場合があります。 コマンドが予想よりも長く実行されたり、コマンドの実行中にサーバーがダウンした場合に備えて、タイムアウトが必要です。 サーバーはAIX / kshです(しかし、私はそれは本当に重要ではないと思います。

3
マルチコアプロセッサのtopコマンド
フリースケールのIMX6クアッドプロセッサを使用しています。topコマンドが4つのコアすべてまたは単一のコアのCPU使用率をリストするかどうかを知りたいです。アプリケーションのCPU使用率は、4つのコアと1つのコアで同じであることがわかります。アプリケーションによるCPU使用率はシングルコアで増加し、4コアで減少すると推測していましたが、変更されていません。

3
ターミナルでマルチスレッドgrepを起動する方法は?
それぞれ2 GBの250以上のファイルがあるフォルダーがあります。それらのファイルで文字列/パターンを検索し、結果をファイルに出力する必要がありoutputます。私は次のコマンドを実行できることを知っていますが、遅すぎます!! grep mypattern * > output スピードアップしたいです。Javaのプログラマーである私は、プロセスを高速化するためにマルチスレッドを使用できることを知っています。grep「マルチスレッドモード」で起動し、出力を1つのoutputファイルに書き込む方法に固執しています。
38 grep  parallelism 

2
複数のコンピューターに大量のダウンロードを配布するにはどうすればよいですか?
大きなファイル(1GB)をダウンロードする必要があります。Linuxを実行している複数のコンピューターにもアクセスできますが、それぞれが管理ポリシーによって50kB / sのダウンロード速度に制限されています。 このファイルを複数のコンピューターにダウンロードして配布し、すべてのセグメントがダウンロードされた後にマージして、より速く受信できるようにするにはどうすればよいですか?

15
同じLinuxコマンドを複数のタブ/シェルで同時に実行するにはどうすればよいですか?
Linuxに複数のタブで同時にコマンドを実行するために使用できるツール/コマンドはありますか?同じコマンドを実行したい:./myprog argument1 argument2同時に複数のシェルで、スレッドプログラムでミューテックスが正常に機能しているかどうかを確認します。このプログラムのインスタンスの数を増やして、後でコードにストレスがかかるようにします。 壁のようなものを探しています。ttyを使用することも考えられますが、これをもっと多くのシェルに拡張する必要がある場合、それは非常に苦痛のように思えます。

4
-jオプションを作成するために渡す最大数を決定する方法は?
できるだけ早くコンパイルしたい。図を移動します。そして、-jオプションに続く番号の選択を自動化したいと思います。シェルスクリプトなどで、その値をプログラムで選択するにはどうすればよいですか? の出力は、nprocコンパイルに使用できるスレッドの数と同等ですか? make -j1 make -j16

6
複数のダイジェスト(md5、sha256)を同時に計算しますか?
ディスクI / Oと空きRAMがボト​​ルネックであるという仮定の下で(CPU時間は制限ではありません)、複数のメッセージダイジェストを一度に計算できるツールが存在しますか? 大きなファイル(サイズはギガバイト)のMD-5およびSHA-256ダイジェストを、できれば並列に計算することに特に興味があります。試しましたがopenssl dgst -sha256 -md5、1つのアルゴリズムを使用してハッシュを計算するだけです。 予想される動作の擬似コード: for each block: for each algorithm: hash_state[algorithm].update(block) for each algorithm: print algorithm, hash_state[algorithm].final_hash()

4
4つのタスクを並行して…どうすればいいですか?
ディレクトリに多数のPNGイメージがあります。これらの画像を圧縮するために実行するpngoutというアプリケーションがあります。このアプリケーションは、私がやったスクリプトによって呼び出されます。問題は、このスクリプトが次のように一度に1つずつ実行することです。 FILES=(./*.png) for f in "${FILES[@]}" do echo "Processing $f file..." # take action on each file. $f store current file name ./pngout -s0 $f R${f/\.\//} done 一度に1つのファイルのみを処理するには、多くの時間がかかります。このアプリを実行した後、CPUがわずか10%であることがわかります。そのため、これらのファイルを4つのバッチに分割し、各バッチをディレクトリに入れて、4つのターミナルウィンドウ、4つのプロセスから4を起動できることを発見しました。ジョブは時間の1/4かかります。 2番目の問題は、イメージとバッチを分割し、スクリプトを4つのディレクトリにコピーして、4つのターミナルウィンドウを開き、bla bla ... 何も分割せずに、1つのスクリプトでそれをどのように行いますか? 私は2つのことを意味します:最初にbashスクリプトからどのようにバックグラウンドにプロセスを起動しますか?(最後に追加するだけですか?)2番目:4番目のタスクを送信した後、バックグラウンドへのタスクの送信を停止し、タスクが終了するまでスクリプトを待機させるにはどうすればよいですか?つまり、1つのタスクが終了すると新しいタスクをバックグラウンドに送信するだけで、常に4つのタスクを並行して保持しますか?そうしないと、ループは何十億ものタスクをバックグラウンドで起動し、CPUが詰まります。

8
複数のbashスクリプトを呼び出して、順番にではなく並行して実行する
:私は3つ(またはそれ以上)のbashスクリプトを持っていると仮定しscript1.sh、script2.shとscript3.sh。これら3つすべてのスクリプトを呼び出して、並行して実行したいと思います。これを行う1つの方法は、次のコマンドを実行することです。 nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (一般に、スクリプトの終了には数時間または数日かかる可能性があるためnohup、コンソールが閉じても実行し続けるように使用したいと思います。) しかし、これら3つのコマンドを1 回の呼び出しで並行して実行する方法はありますか? 私は次のようなものを考えていました nohup bash script{1..3}.sh & しかし、これは、ではなく、、、およびを順番に実行するようscript1.shに見えます。script2.shscript3.sh

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
xargsが複数のプロセスからの出力をうまくマージしないようにする方法は?
xargsオプションで使用しています--max-args=0(または-P 0)。 ただし、プロセスの出力は、stdout適切な行分離を考慮せずにストリームにマージされます。だから私はしばしば次のような行になります: <start-of-line-1><line-2><end-of-line-1> パターン全体で出力全体を使用egrepし^ているので、xargsこれは結果を台無しにします。 xargsプロセス出力を順番に(1つのプロセスの出力が連続している限り、任意の順序で)強制的に書き込む方法はありますか? または他の解決策はありますか? 編集:ユースケースの詳細: さまざまなホストからWebページをダウンロードして解析したい。すべてのページの読み込みに約1秒かかり、リクエストを並列化する必要があるページが数十個あるため。 私のコマンドの形式は次のとおりです。 echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \ wget -q -O- http://{}/somepage.html | egrep --count '^string' ホストIP($ IPs変数)およびその他のデータは含まれているbashファイルから取得されるため、Perlのようなものではなくbashを使用します。

4
並列プロセスを実行し、両方が終了したときに出力を結合する方法
いくつかのデータを約5つまたは6つの異なるプログラムにパイプし、最終結果をタブ区切りファイルに渡すbashシェルスクリプトがあります。 次に、別の同様のデータセットに対して再度同じ操作を行い、2番目のファイルに出力します。 次に、両方のファイルを比較分析のために別のプログラムに入力します。例えば、単純化するために Data1 | this | that |theother | grep |sed | awk |whatever > Data1Res.csv Data2 | this | that |theother | grep |sed | awk |whatever > Data2Res.csv AnalysisProg -i Data1res.csv Data2res.csv 私の質問は次のとおりです。step1とstep2を同時に(たとえば&を使用して)実行し、両方が完了したときにstep3(AnalysisProg)のみを起動するにはどうすればよいですか。 THX ps AnalysisProgは、ストリームまたはfifoでは機能しません。

5
リモートマシンでスクリプトを並行して実行する方法は?
64コアのリモートマシンにsshできます。このマシンで640個のシェルスクリプトを並行して実行する必要があるとしましょう。どうすればいいですか? 640個のスクリプトを、それぞれ10個のスクリプトの64個のグループに分割できます。次に、これらの各グループを並列に実行するにはどうすればよいですか、つまり、使用可能なコアのそれぞれに1つのグループを追加します。 フォームのスクリプトでしょうか ./script_A & ./script_B & ./script_C & ... どこscript_Aが最初のグループ、script_B2番目のグループなどに対応しますか? 1つのコアで実行される1つのグループ内のスクリプトは連続して実行できますが、グループをすべてのコアで並列に実行する必要があります。

2
パイプコマンドの並列実行
次のシナリオを検討してください。2つのプログラムAとBがあります。プログラムAは文字列の標準出力行に出力し、プログラムBは標準入力からの行を処理します。これらの2つのプログラムを使用する方法は、もちろん次のとおりです。 foo @ bar:〜$ A | B 今、私はこれが1つのコアのみを消費することに気付きました。したがって、私は疑問に思っています: プログラムAとBは同じ計算リソースを共有していますか?その場合、AとBを同時に実行する方法はありますか? 私が気づいたもう1つのことは、AがBよりもはるかに高速に実行されることです。したがって、どういうわけかより多くのBプログラムを実行して、Aが出力する行を並行して処理できるかどうか疑問に思っています。 つまり、Aはその行を出力し、プログラムBのN個のインスタンスがあり、これらの行を(最初に読み取る人は誰でも)読み取り、処理してstdoutに出力します。 私の最後の質問は: 潜在的に発生する可能性のある競合状態やその他の矛盾を気にすることなく、いくつかのBプロセス間でAに出力をパイプする方法はありますか?

1
xargs「並列プロセッサ」のインデックスを取得するにはどうすればよいですか?
私は2つのリソース、という名前があると0し、1唯一の排他的にアクセスすることができ、。 xargs無料の相互排除サービスとして使用するために起動する「並列プロセッサ」の「インデックス」を回復する方法はありますか?たとえば、次の並列化された計算を検討してください。 $ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {}" consuming task 1 consuming task 2 consuming task 3 consuming task 4 consuming task 5 consuming task 6 consuming task 7 consuming task 8 私の質問はindex、出力が次のようになるような魔法の単語があるかどうかです $ echo {1..8} | xargs -d " …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.