1 / 27

分散画像処理環境 VIOS

分散画像処理環境 VIOS. 名古屋工業大学電気情報工学科 松尾啓志. 画像処理の並列性. 多くの画像処理は、並列、分散処理に適した処理が多い。 比較的大規模な計算を必要とする場合が多い 独立性の高い処理が多い 画像を入出力とした処理単位(モジュール)を複数組み合わせた処理は、モジュール間の並列性も考慮することができる。. 心臓 収縮期 (造影剤 注入前). 画像処理モジュール. 差分. FFT. LOW PASS. IFFT. 心臓 収縮期 (造影剤 注入後). 差分. 心臓 拡張期 (造影剤 注入前). 心臓 機能像. 差分.

lowell
Download Presentation

分散画像処理環境 VIOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 分散画像処理環境VIOS 名古屋工業大学電気情報工学科 松尾啓志

  2. 画像処理の並列性 • 多くの画像処理は、並列、分散処理に適した処理が多い。 • 比較的大規模な計算を必要とする場合が多い • 独立性の高い処理が多い • 画像を入出力とした処理単位(モジュール)を複数組み合わせた処理は、モジュール間の並列性も考慮することができる。

  3. 心臓 収縮期 (造影剤 注入前) 画像処理モジュール 差分 FFT LOW PASS IFFT 心臓 収縮期 (造影剤 注入後) 差分 心臓 拡張期 (造影剤 注入前) 心臓 機能像 差分 FFT LOW PASS IFFT 心臓 拡張期 (造影剤 注入後)

  4. VIOSI (1992年) • 画像処理モジュール(入力:画像、出力:画像)をRPC(RemoteProcedureCall)で結合したシステム。 • 3種類のプロセスが協調して、分散画像処理を実行 • ユーザインタフェースプロセス:VPE • 画像処理エンジン:IPU • データベース、スケジューラなど:OM • 各ワークステーションの負荷予測を元にした分散スケジューリング

  5. VIOSII(1994年) • 画像処理の局所的な独立性を考慮し、並列画像処理ワーキングセットという考え方を用い、並列画像処理記述言語VPE-Pを開発 • 画像処理エンジンIPUをIPU-P(インタプリタ言語)が実行する仮想計算機として実装 • モジュールの動的拡張 • より精度よい、スケジューリング情報の獲得

  6. VIOSIIの問題点 • 並列実行の単位が、画像分割のみ • 画像の加算、FFT、テンプレートマッチング • メインフロー文において、各モジュールは逐次実行しかできない。 • IPUをインタプリタ言語により駆動される仮想計算機として実装したため処理が遅い。 画像分割によらない並列性の記述の必要性

  7. VIOSIIIの拡張方針 • 並列画像処理記述能力の向上 • 明らかに並列性があるような処理は、多少記述の容易性を損なっても記述できなければいけない。 • ネットワークレイテンシの隠蔽 • ネットワークを介したアクセスは遅い。しかし、明示的なプログラムを書くことにより、ある程度の隠蔽は可能。 • 絶対的な処理速度の向上 • インタプリタによる実行を処理の流れを記述するメインフロー記述部だけに限定し、画像処理モジュールはネイティブコード、ダイナミックリンクによる実行。

  8. リモートデータへの透過的アクセスと、レイテンシの隠蔽リモートデータへの透過的アクセスと、レイテンシの隠蔽 • VIOSIIIでは画像データへの透過的なアクセスを実現するために、すべての画像処理モジュール内で画像全体の画素をアクセス可能とした。 • ワーキングセット内には、注目画素以外にも、読み込み専用の周辺画素があり、その範囲に限っては、ネットワークを介したアクセスは必要としない。 • 周辺画素を超えたアクセスが問題となる。 • 各ワーキングセットが、読み書きできる共有変数の枠組みを用意した。 実際にアクセスする際のコストが膨大となる。 アクセスコスト(排他制御を含む)が非常に大きい

  9. 言語仕様(その1) Module モジュール名(入力変数名1:input,……,出力変数名:output) int 変数名1 on working-set [cashe n] //画像 int 変数名2                 //パラメータ Working set 例) cache 2 on pixel cache 2 処理 出力 入力

  10. module X { int global_val; parallel { int local_val; ….. } { …… } parallel { ….. } } 言語仕様(その2) 並列実行部 逐次実行部 並列実行部 実行フロー

  11. 言語仕様(その3) parallel { int val; c[ ][ ] = a[ ][ ] - (a[-1][] +a[ ][-1] + a[1][ ] + a[ ][1]); val=a[[0]][[0]]; }

  12. 言語仕様(その4)  main() { image A,B,C; int a,b,c; A = load(“foo.obj”); B = load(“bar.obj”); C = load(“hoo.obj); Syori(A,a); Syori(B,b); if (a > b) Tugi(A,C); else Tugi(B,C); } 画像データの流れを解析 し、モジュール間の並列 実行を行う(VIOSでは、 画像データは単一代入)

  13. ネットワークレイテンシ隠蔽のために(1) • アクセスポリシの導入 • プログラマは、周辺画素以外へのアクセスのポリシを明示的に指定可能 • 周辺画素以外へのアクセスかどうかチェックしない • ネットワークを介したアクセス • ワーキングセット内の画素値で補間 • 定数値の代入  中心画素 ワーキングセット 外へのアクセス (ネットワーク経由) 周辺画素

  14. ネットワークレイテンシ隠蔽のために(2) • プログラマブル大域変数バッファ • 大域変数へのアクセスのコストは膨大であり、処理速度の低下を招く。 • 画像処理アルゴリズムの中には、大域変数を局所変数とみなし、適当な処理単位ごとにそれぞれの値を統合し、処理を進めることができるものがある。 • プログラマーは、個々のIPUが有するローカルキャッシュの統合方法を明示的に指定することを可能とした。 • 最大値統合 • 最小値統合 • 加算統合 • など、、、

  15. #vios hist off add module Histgram(in:input, hist:output) int in on box[32][32]; int hist[ ]; { parallel { for(int x = 0; x <32; x++) for(int y = 0; y<32; y++) hist[in[x][y]]++; } } ヒストグラム計算 大域変数 ボックス ワーキングセット

  16. ネットワークレイテンシ隠蔽のために(3) • 画像処理エンジンIP1の複数実行 • IP1(プログラマから見た場合無限個存在する画像処理エンジン)を、多数走らせると同時に、通信モジュール、IP0(コントロールエンジン)など、全モジュールをスレッド化することにより、ネットワークレイテンシを隠蔽

  17. 性能評価 • 並列画像認識アルゴリズムを実装 • ソーベル、エッジ検出、大津の2値化、ハフ変換 • 実行プラットフォーム • マルチプロセッサ(SIMD):SparcCenter1000 ( 8 CPU) • ワークステーションクラスタ:Pentium II, 100Base Tネットワーク,スイッチングハブ • OS:Solaris 2.5.1 • C言語、C言語+PVM3.3による記述と比較

  18. Main() { image InImage, OutImge; image Magnitude, Angle, Edge, Bin; InImage = load(“star.obj”); //ソーベルフィルタ Magnitude = new(“Magnitude”); Angle = new(“Angle”); SobelFilter(InImage, Magnitude, Angle); //細線化 Edge = new(“Edge”); ThinLine(Magnitude, Angle, Edge); //Histgram int Histo[256]; MakeDensHisto(Edge, Histo); //大津の2値化 int threshold; CalculateThreshold(Histo, Threshold); Binary(Edge, Bin, threshold); //ハフ変換. int Out1Param[THETA_MAX][RHO_MAX] HoughLine(Bin, Out1param); image Out1 = (image)Out1param;

  19. Module MakeDensHisto(in: input, histo: parameter) int in on pixel; int histo[256]; #vios mutex histo off add { parallel { int dens = in[][]; if (dens > 255) dens = 255; else if (den <0) dens = 0; histo[dens]++; } }

  20. #define THETA_MAX 180 #define RHO_MAX 1446 module HoughLine(in1:input,out1:parameter) int in1 on pixel; int out1[THETA_MAX][RHO_MAX]; { #vios mutex out1 off add parallel { int theta,rho; float frho; if(in1[][]) { for(theta = 0; theta <THETA_MAX;theta++) { float th; …. Out1[theta][rho]++; …..

  21. (秒) 並列画像認識プログラムの実行性能 (SPARCCENTER 1000 8CPU)

  22. (秒) 並列画像認識プログラムの実行性能 (Pentium II x4, 100 base T,スイッチングハブ)

  23. プログラマブル大域変数バッファの性能評価

  24. まとめと今後の予定 • 分散画像処理環境VIOSIIIの概略について説明した。 • 今後の予定 • バグとり • 配布

More Related