2

Windows マシンで Snow バックエンドを使用して foreach ループを実行しています。使用するコアは 8 つあります。rscript は、Python スクリプトに埋め込まれたシステム コールを介して実行されるため、アクティブな Python インスタンスも存在します。

#workers=#cores を使用せず、代わりに #workers<#cores を使用すると、システム プロセスまたは python インスタンスが常に開かれるので、何か利点はありますか?

#workers=#cores を使用して正常に実行されますが、r ワーカー インスタンスでコア (可能な最大スレッド数) を飽和させると、パフォーマンスが低下しますか?

4

1 に答える 1

1

それは依存します

  1. プロセッサ (具体的にはハイパースレッディング)
  2. さまざまな画像との間でコピーする必要がある情報の量
  3. これを複数のボックス(LAN)に実装している場合

1) ハイパースレッディングが役立ちます。私のマシンがそれを行うことを知っているので、通常、ワーカーの数をコアと一致させた場合と比較して、コアのワーカーの数が 2 倍になり、コードは約 85% の時間で完了します。それ以上は改善しません。

2) たとえばソケットを使用してフォークしていない場合は、分散メモリ パラダイムにいるかのように作業しています。つまり、すべてのワーカーに対してメモリ内に 1 つのコピーを作成することを意味します。これは、かなりの時間になる可能性があります。また、作業内容によっては、同じマシン内の複数のイメージが多くのスペースを占有する場合があります。ワーカーを 2 倍にするとメモリ不足になるため、ワーカーの数と数を一致させることがよくあります。

これは、3) 複数のワークステーションでのネットワーク速度によって悪化します。ローカルのマシン間では、スイッチは約 20 メガバイト/秒でデータを転送します。これは、自宅でのインターネット ダウンロード速度よりも 10 倍高速ですが、同じボックスでコピーを作成する場合と比較するとカタツムリの速度です。

何かをする必要があるときに Python が優先されるように、R の nice 値を増やすことを検討してください。

于 2015-10-22T19:26:11.660 に答える