0

他のリアルタイム アプリケーションのパフォーマンスへの影響を最小限に抑えるために、一部の (imagemagick 画像処理) バッチ ジョブを単一の論理プロセッサのバックグラウンドで実行するように自動的に制限したいと考えています。

私がまとめた方法は、コマンド ライン引数をフラグとして使用することです。バッチ ファイルが最初にコマンド ライン引数なし (およびアフィニティなし) で開始されると、アフィニティが最後の論理プロセッサに設定された状態で再び開始され、アフィニティが設定されていることを示す仮引数が追加され、バッチ ジョブ:

REM START OF THISBATCHFILE.CMD
IF NOT [%1]==[] GOTO AFFINITY_SET
SET LAST_PROCESSOR=1
FOR /L %%I IN (2,1,%NUMBER_OF_PROCESSORS%) DO SET /A LAST_PROCESSOR*=2
PROCESSOR = %LAST_PROCESSOR%
START /B /AFFINITY %LAST_PROCESSOR% THISBATCHFILE.CMD DUMMY_ARGUMENT
EXIT 0
:AFFINITY_SET

REM Batch Job Starts Here
REM ImageMagick command 1
REM ImageMagick command 2
REM ...
REM ImageMagick command N
REM Batch Job Ends Here
EXIT 0

これは、バッチ ジョブを最後の (4 番目の) 論理プロセッサに限定するために、私の 4 コア Win8.1 システムで問題なく動作しているようです。私の質問は - これを行うための「より良い」方法はありますか?

4

1 に答える 1

0

ImageMagick が使用するリソースは、3 つの異なる方法で制御できます...プロセスを開始するときにコマンドラインを使用する方法、環境変数を使用する方法、および構成ファイルを使用する方法です。あなたのユースケースではconvert、リアルタイムアプリケーションが実行されているかどうかに関係なく、常に ImageMagick をスロットルするシステム構成ファイルを編集するよりも柔軟で、すべての呼び出しを変更するよりも簡単な環境変数を使用することをお勧めします。

次のコマンドを実行すると、変更できるリソースとその現在の値を確認できます。

identify -list resource

出力

Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 17.18GP
  Memory: 8GiB
  Map: 16GiB
  Disk: unlimited
  File: 192
  Thread: 1
  Throttle: 0
  Time: unlimited

スレッド数 (並列処理) を減らし、CPU を時々解放する時間を少し設定することをお勧めします。ImageMagick が消費できるメモリを変更することもできます。

したがって、具体的には、一連の ImageMagick コマンドの直前に制限を設定してみます。

...
...
SET MAGICK_THREAD_LIMIT=1
SET MAGICK_THROTTLE=50

REM Batch Job Starts Here
REM ImageMagick command 1
REM ImageMagick command 2
REM ...

convertまたは、次のように呼び出しごとに制限を指定できます。

convert -limit thread 1 input.png ... <processing> ... output.png

私の最初の制限リストのファイル数を見ると、それが であることがわかります1922単一のコマンドの実行中にファイル数を制限することで、私が話していることを示すことができます。使用するコマンドは、制限をリストするものです...

convert -limit file 2 -list resource info:

Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 17.18GP
  Memory: 8GiB
  Map: 16GiB
  Disk: unlimited
  File: 2             <--- 2 files only
  Thread: 1
  Throttle: 0
  Time: unlimited

そのため、開くことができるファイルの数をリストするコマンドの期間中、開くファイルの数を制限しまし2た。それはそれを示しています。

于 2016-01-18T09:09:02.820 に答える