並列処理は速度向上の決定打となりうるか?


結論から言うと色々難しい。。
実例は以下

マルチスレッド描画

どう難しいか?

処理を分割するためのコストが必要。
前回の記事にも関わるが、プロセス数やスレッド数がコア数を越えたあたりから処理分割のコストによって
かえって遅くなる。


前回の記事

物理コア数で分割して、処理分割コストが最小限となれば良いのでこれを目指す必要がある。
ArcGISの場合は、COMコンポーネントが共通のメモリ展開出来ない、例えばIWorkspaceであればIworkspaceをそれぞれのスレッド
で開く必要があり、全体と言うかトータルコストは当然おおきくなってしまう。

※STAが必須
以下MSの文書から抜粋 ( .NETオンリーなら同一化出来る)
アパートメントとは、同じスレッド アクセス要件を共有するオブジェクトのプロセス内の論理コンテナです。同じアパートメント内のオブジェクトはすべて、そのアパートメント内のどのスレッドからの呼び出しも受け取ることができます。.NET Framework はアパートメントを使用せず、マネージ オブジェクトはスレッド セーフな方法ですべての共有リソースを独自に使用します。

ではDotNetのDataTableをそれぞれ取るパターンではどうか?
かなり可能性は高くなってくる。
しかし例えばDB問い合わせを連続的におこなうような処理をしても全く意味は無い
メモリ上に展開できるデータを展開して回さない限りコストメリットを得られない場合がほとんど。

回してジオメトリごとに再近接といっても、塊は一緒?
結局COM化コストがかかるとあまり意味ない、NetTopoSuiteとかでやればいい気がしてくる。


そもそも小さいクエリを連続して回すパターンは最悪のパターン 絶対に避けましょう。
ループ内でクエリ流すとか目も当てられないパターンです。

よく検討しないと、色々難しいです。。。
結局結果の結合やデータの分割コストを良く検討しないとかえって遅くなる場合が多いと言うお話。

カテゴリー: 設計 パーマリンク