2016-04-12 10 views
0

私はparallel宝石や複数のコアを使用してスピードアップしたい遅いコードのセクションを持っています。パラレル宝石付きRubyで並列宝石を使用する。使用するコア数

、あなたが使用したいプロセスやスレッドの数を指定する必要がありますので、私はそれが私が持っている論理コアの同じ番号を使用するようにハードコーディングされました。それは完璧に動作しますが、私の問題は、このコードは異なる数のコアを持つ他の人が配布して使用することを意図していることです。

私は自分のマシンを持っているコアの数を検出し、その番号を使用しようとするべきでしょうか?または、ユーザーは明示的に使用するスレッドの数を指定している場合は、並列処理をデフォルトにして、マルチスレッドコードに切り替える必要がありますか? (例:pg_restore

コアを検出しようとすると、見つかったすべてのコアを使用するか、コアの1つを除くすべてのコアを使用する方が丁寧でしょうか?

+1

ご利用の場合は何ですか?大量のファイルを処理するか、デーモンを実行していますか?言い換えれば、私はあなたに私の芝生に消火剤を与えさせませんでしたが、私は地獄にして私の家を燃やすことから地面に救うために使うことができます。 – fny

+0

この場合、データベースにテストデータを入力しています。超重大ではない。これは、ユーザーが1回か2回しか実行できない、1回限りのタスクを実行するためのCLIツールです。しかし、それは12分から1分(私のコンピュータ上)の違いです。それは私が以前に遭遇した問題であり、私は一般的に受け入れられている練習があるかどうか疑問に思いました。 – aidan

+0

質問はかなり広範で、答えは特定のケースになります。あなたが設定ファイルを提供し、ユーザーは多くのプロセス/スレッドが生み出されるべき方法を決定させることができます – joanbm

答えて

2

は考えどのようにメモリを多用するプログラムがあるが、これらの要件はまた、あなたがそれをテストしているマシンよりも少ないメモリを持つ人々のための主要な予期しない問題が発生する可能性があります。

これはCLIツールなので、使用するプロセス数を引数とするフラグ--procsを追加して、それをユーザーに任せて決定するのはなぜですか?

+0

この例では、実際にはごくわずかなメモリしか使用していません。私は記憶を考えなかった。それは重要な考慮事項です。 – aidan