並列化のスレッド数の設定

Namespace: FVIL
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public static void SetParallelNum(
	int num
)
Visual Basic
Public Shared Sub SetParallelNum ( 
	num As Integer
)

Parameters

num
Type: System..::..Int32
並列化の上限数 (1~)

Remarks

マルチコア対応機能の処理を並列化するスレッド数を設定します。 この設定値は、スレッド毎に保持されます。 既定では 論理プロセッサ数(GetProcessorNum()()()() が返す値)に設定されています。 既定値を変更する場合は、環境変数 OMP_NUM_THREADS を設定してください。
許容値:
意味
1並列化を行いません。
2~ この設定値に従って並列化します。 上限は設けていませんが、プロセッサの物理数を超える値を指定した場合は 逆に性能が低下しますのでご注意ください。

エラーコード:

ErrorCode メンバ内容
11FVIL.ErrorCode.INVALID_PARAMETER引数に指定されたインスタンスが不正です。 1 または 2 以上の値を指定してください。

詳細:
本ライブラリでは、幾つかの機能でマルチコア対応を行っています。 マルチコア対応の機能は、本関数で設定されたスレッド数に応じて、 内部で自動的にスレッドを生成して、並列処理を行います。

本関数で 1 と設定した場合は、下図(上)のように1つの画像を1つのスレッドで処理します。 2 と設定した場合は、下図(下)のように1つの画像を2つのスレッドで処理します。



物理的なプロセッサが複数ある場合は、複数のスレッドで並列処理するとレーテンシを短縮できます。 但し、物理的なプロセッサ数と本関数で設定したスレッド数が一致していても、 条件によっては逆に性能が低下する場合があります。 CPU のモデルや処理対象の画像サイズによるので、一概に最適値を提示する事ができません。 具体的な挙動については、以降の参考値をご参照ください。

参考値(1): Intel Core 2 Quad Q6600 2.40GHz, 1.97GB RAM
4コア環境(2コアのパッケージが2つある環境)で測定した結果を示します。 下のグラフは、縦軸が処理時間(ミリ秒)、横軸が画像サイズを示します。 何れのサイズも画像種別は UC8(8bit/pixel) で、チャネル数は 1 です。 測定に使用した機能は、ソーベルフィルタ(CFviSobelFilter)です。

x1(紺色)が並列化なし、x2~x4 が複数スレッドで並列化した場合の処理時間を示します。 x1 に対して、x2~x4 は処理時間が短縮されています。



下のグラフは、前述の x2~x4 の各処理時間を最速値で割った値をグラフ化したものです。 1.0 が最速値を意味します。 処理対象の画像のサイズが小さい場合(640x480~1600x1200)は、4並列(x4の水色の線)が最速ですが、 サイズが大きくなると、逆に並列数が少ない方が処理時間が短くなります。

参考値(2): Intel Xeon E5345 2.33GHz, 3.25GB RAM
8コア環境(2コアのパッケージが4つある環境)で測定した結果を示します。 下のグラフは、縦軸が処理時間(ミリ秒)、横軸が画像サイズを示します。 何れのサイズも画像種別は UC8(8bit/pixel) で、チャネル数は 1 です。 測定に使用した機能は、ソーベルフィルタ(CFviSobelFilter)です。

x1(紺色)が並列化なし、x2~x8 が複数スレッドで並列化した場合の処理時間を示します。 x1 に対して、x2~x8 は処理時間が短縮されています。



下のグラフは、前述の x2~x8 の各処理時間を最速値で割った値をグラフ化したものです。 1.0 が最速値を意味します。 処理対象の画像のサイズが小さい場合(640x480~1600x1200)は、8並列(x8の青色の線)が最速ですが、 サイズが大きくなると、逆に並列数が少ない方が処理時間が短くなります。 この環境では、x5 と x7 が全てのサイズで安定して速い事が判ります。

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also