2016-10-19 9 views
1

multicoreを使用するdoMCを使用します。私がデバッグしていたとき(コンソールで)、横になってfork-bombedになったことが数回起こりました。実行中のRプロセスの数を制限する方法はありますか

Rにsetrlimit()システムコールがありますか? このためpyhtonで私はRプロセスの数が

EDIT数に実行されている制限したい理想的resource.RLIMIT_NPROC

使用します。OSはLinuxのCentOSのである6

+0

使用しているOSは何ですか?私は 'doMC'を使っているならLinuxと仮定します。 – cdeterman

答えて

1

複数の選択肢があります。 RhpcBLASctl:ここでは私のお気に入りのツールのWriting R Extensions, Section 1.2.1.1

Packages are not standard-alone programs, and an R process could 
contain more than one OpenMP-enabled package as well as other components 
(for example, an optimized BLAS) making use of OpenMP. So careful 
consideration needs to be given to resource usage. OpenMP works with 
parallel regions, and for most implementations the default is to use as 
many threads as 'CPUs' for such regions. Parallel regions can be 
nested, although it is common to use only a single thread below the 
first level. The correctness of the detected number of 'CPUs' and the 
assumption that the R process is entitled to use them all are both 
dubious assumptions. The best way to limit resources is to limit the 
overall number of threads available to OpenMP in the R process: this can 
be done via environment variable 'OMP_THREAD_LIMIT', where 
implemented.(4) Alternatively, the number of threads per region can be 
limited by the environment variable 'OMP_NUM_THREADS' or API call 
'omp_set_num_threads', or, better, for the regions in your code as part 
of their specification. E.g. R uses 
    #pragma omp parallel for num_threads(nthreads) ... 
That way you only control your own code and not that of other OpenMP 
users. 

つから関連するセクションでは、これを制御するパッケージです。ここではその説明は次のとおり

'BLAS'(別名 'GotoBLAS'、 'ACML' および 'MKL')上のスレッドの数を制御します。 'OpenMP'のスレッド数を制御することが可能です。実現可能であれば、多くの論理コアと物理コアを にしてください。

パラレルセッションの数と、各並列スレッドに割り当てられたBLASコアの数を制御する必要があります。パラレルパッケージには、セッションあたり2つのスレッドのデフォルトがある理由があります。

このすべては、実行しているLinuxまたはUnixのフレーバーにはほとんど依存していないはずです。さて、OS Xはもちろん(まだ!)OpenMPを提供していないという事実は別として、

非常に外側のレベルは、doMCとフレンドから制御できます。

+0

非常に有望に見えます、ありがとう私はそれを掘るでしょう – statquant

2

あなたはregisterDoMCを使用することができます(参照DOC here

registerDoMC(cores=<some number>) 

は別のオプションはRスクリプトを実行する前にulimitコマンドを使用することです。

ulimit -u <some number> 

Rが生成できるプロセスの数を制限します。

複数のRプロセスが同時に使用するCPUの総数を制限する場合は、cgroupsまたはcpusetsを使用し、Rプロセスをcgroupまたはcpusetに接続する必要があります。それらはcgroupまたはcpusetで定義された物理CPUSに限定されます。 cgroupはより多くの制御(例えばメモリも)を可能にしますが、セットアップがより複雑です。

+0

あなたの編集をありがとう、私はそれを見てみましょう – statquant

関連する問題