|

プロジェクトの開発成果は以下のようなものである。
● マルチコア組込みクラスタ計算機を構築し、その性能を評価するとともに、固定小数点演算関数ライブラリおよび画像処理・画像照合ライブラリの実機上での評価を本クラスタ計算機上で行った。
● 固定小数点演算関数ライブラリについては、目標とした関数については開発を完了した。各関数の速度評価はすべて完了した。
● 画像処理・画像照合関数ライブラリについては、開発および性能評価(固定小数点版のみ)が完了している。
● 開発成果の告知と普及を目的に、ホームページを立ち上げた。基本的なページの作成は既に完了し定期的に更新を行っている。ライセンスに抵触しないプログラムについてはWeb公開する予定である。
また、開発成果の特徴は以下のようなものとなっている。
●
開発したライブラリは、一般的なC言語の関数と同様に利用できる。
●
小数点位置を変数で管理できるため、固定小数点演算によるアプリケーションプログラムの作成が容易である。
●
関数レベルでは浮動小数点演算の数倍から10倍程度高速であり、アプリケーションレベルでは数10倍程度の高速化が見込まれる。
●
分散・協調並列処理の高速化を目的として作られているが、シングルノードのコンピュータでも全く同様に使用し、高速処理を行うことが可能である。
●
ソースコードでも提供されるため、Linux OSとCコンパイラが動作する環境であれば、機種依存性を考慮せずに使用することができると思われる。
●
フリーである。
●
実機上で演算性能を評価してあり、評価結果はホームページで公開されている。
以下に、その詳細を示す。
1.マルチコアクラスタ計算機の開発と性能評価
組込みCPU による分散・協調並列処理プラットホームとして、マルチコア組込みCPU を用いたクラスタ計算機を開発した。
図1にクラスタ計算機のアーキテクチャを示す。開発したクラスタ計算機は4台の計算ノードが100Mbpsの高速イーサネットで相互に接続された構成とした。各ノードには2つのM32R CPUコアを持つマルチコアCPUを搭載したCPUボードMappi-IIIを用いた。4台のうち1台の計算ノードは、ファイル共有、ユーザ管理を行うサーバノードとしても動作する。詳細仕様を表1に、開発したクラスタ計算機を図2に示す。
開発したクラスタ計算機の最大の特徴は、マルチコア組込みCPUを搭載しているためネットワーク分散・協調並列処理とマルチスレッド処理によるメモリ共有型並列処理の両者を融合した並列処理が可能である点である。

図 1 開発したマルチコア組込みクラスタ計算機のアーキテクチャ
表 1 クラスタ計算機および計算ノードの仕様


図 2 開発したクラスタ計算機『M32RUCC』
2.固定小数点演算関数ライブラリの開発および性能評価
固定小数点演算関数ライブラリの開発は、(i) 関数の選定、(ii) アルゴリズムの調査・検討、(iii) 関数のコーディング、(iv) テスト、(v) 性能評価の手順で行った。
なお、今回のプロジェクトにおいて開発予定の関数については、ほぼすべての開発を完了した。
今回開発した関数の一覧を表2に示す。
表 2 開発対象とした固定小数点演算関数一覧

(1)アルゴリズムの調査・検討
四則演算(乗除算)であっても、様々なアルゴリズムが存在する。本プロジェクトでは、乗除算、sin / cos関数、atan関数、1次元および2次元フーリエ変換、型変換についてアルゴリズムの調査・検討を行った。検討の結果、各関数に用いるアルゴリズムは以下の通りに決定した。
●
加減算: C言語の整数演算をそのまま使用
●
除算: CORDICアルゴリズム
●
三角関数: テーブル参照法(補間なし)、および チェビシェフ多項式近似アルゴリズム
●
逆三角関数: CORDICアルゴリズム
●
1次元および2次元フーリエ変換: DIT型FFT(*1)、およびSR型FFT(*2)
*1) DIT (Decimation in Time)型FFT
時間間引き、すなわち空間領域においてデータをインデックスが偶数と奇数で分割し、高速化するタイプのFFTであり、最も典型的なアルゴリズム。
*2) SR (Sprit Radix)型FFT
時間間引きあるいは周波数間引きにおいて、偶数番目のデータについては基数2のFFTアルゴリズムを、奇数番目のデータについては基数4のFFTアルゴリズムを適用することにより、演算を効率化したFFTアルゴリズム。
(2)性能評価
性能評価は、演算精度と演算速度の両方について行った。それぞれ関数性能評価用のプログラムを作成し、演算精度についてはデスクトップマシンを用いて評価を行ない、演算速度については4.1で示したクラスタ計算機により評価を行った。
演算精度評価
演算精度の測定条件を以下に示す。
●
同じ入力セットに対して開発したライブラリ関数とCの浮動小数点演算とで演算を行ない、次式に基づき誤差を求めた。

ただし、 、 、 はそれぞれ誤差、固定小数点演算結果、浮動小数点演算による理論値を示す。
●
フーリエ変換については、ランダム関数を使用して入力を生成した。開発した関数のダイナミックレンジの問題から、入力値の上限は256とした。
●
フーリエ変換の浮動小数点演算による理論値はFFTW3ライブラリによって生成したものを用いた。
演算速度評価
演算精度の測定条件および方法を以下に示す。
●
まず一定数の入力セットに対して演算を実行したときの平均時間を求め、次にこのプログラムにおいて測定対象である固定小数点演算関数に関する記述をコメントアウトしたプログラムを実行することによりデータ生成等周辺処理に要する時間を推定し、これを差し引いたものを演算時間とした。
●
時間測定はclock関数により行った (今後、gettimeofdayでの測定をやり直してみる予定) 。
●
比較のために、浮動小数点演算による演算時間も同様の方法で求めている。
●
アーキテクチャによる演算速度の違いを比較するために、開発したクラスタ計算機の他にARM9 (200MHz)を搭載したCPUボードで構築したクラスタ計算機により演算を行った場合の演算時間を求めている。表3に使用したクラスタ計算機の仕様を示す。
表4に演算速度の評価結果を示す。表4において、float / doubleとはCの浮動小数点演算を表す。また、float(PM) / double(PM)とあるのは、PM提供の高速浮動小数点演算演算ライブラリを表す。
表 3 演算速度比較用クラスタ計算機の仕様

表 4 開発した固定小数点演算関数の演算速度
T. 型変換および四則演算の演算速度

U. 三角関数および逆三角関数の演算速度

V. 1次元および2次元フーリエ変換関数の演算速度

3.画像処理・画像照合関数ライブラリの開発および性能評価
画像処理・画像照合関数ライブラリの開発は固定小数点演算関数の場合と同様に、(i) 関数の選定、(ii) アルゴリズムの調査・検討、(iii) 関数のコーディング、(iv) テスト、(v) 性能評価、(vi) サンプルプログラムの作成、(vii)サンプルプログラムの性能評価の手順で行った。ただし、性能評価においては、固定小数点演算関数の場合とは性格が異なり、演算精度については評価が困難であることから演算速度についてのみ評価を行っている。なお、今回のプロジェクトにおいて開発予定の関数については、ほぼすべての開発を完了した。
画像処理・画像照合関数ライブラリでは、開発者がこれまで開発してきた画像照合関連のアプリケーションを調査し、よく用いられている関数について開発を行うものとした。その結果、画像入出力(ビットマップ画像およびRAW画像)、画像の幾何学的変換(平行移動、回転移動、拡大縮小)、切り出し、照合の各機能を実現する関数を作成した。浮動小数点演算によるものと固定小数点演算によるものの両者を開発している。表5に開発対象とした関数の一覧を示す。
表 5 開発対象とした画像処理・画像照合関数一覧

(1)アルゴリズムの調査・検討
複数のアルゴリズムが考えられる回転移動、拡大縮小、自動クロップ、照合についてアルゴリズムを検討した。固定小数点演算関数の場合と同様に、特に速度を重視してアルゴリズムを決定している。
● 回転移動: 双線形補間による回転変換
● 拡大縮小: 双線形補間による拡大縮小変換
● 自動クロップ: 閾値による単純な背景と対象物の判別
● 照合: 位相限定相関法
(2)関数のコーディング
関数のコーディングにおいては、開発効率を上げるために、以下のような工夫を行っている。
● これまでに開発者が開発してきたアプリケーションから有用なコードを抜粋し、必要に応じて固定小数点演算化
● 浮動小数点演算版と固定小数点演算版で共通化できる関数を検討し、浮動小数点演算版は固定小数点演算版を呼び出す形態とした。
● カラー画像と白黒濃淡画像では、基本的にプレーン数が異なるだけであるから、個別の関数を作成するのではなく共通の処理関数を作成し、ユーザから見える関数ではこの処理関数を呼び出す形式とした。
(3)性能評価
演算速度に関する性能評価を行った。評価は表1で示したクラスタ計算機により行っている。演算精度の測定条件および方法を以下に示す。なお、今回のプロジェクトでは、固定小数点版の画像処理・画像照合関数についてのみ評価を行った。
● 入出力画像サイズは128×128。
● まず複数回の試行に対する平均時間を求め、次にこのプログラムにおいて測定対象である画像処理・画像照合関数に関する記述をコメントアウトしたプログラムを実行することによりデータ生成等周辺処理に要する時間を推定し、これを差し引いたものを演算時間とした。
● アーキテクチャによる演算速度の違いを比較するために、固定小数点演算関数の場合と同様に、表1および表3に示した性能を有する2種類のクラスタ計算機で評価を行った。表6に演算速度の評価結果を示す。
表 6 開発した画像処理・画像照合関数の演算速度

(4)サンプルプログラムの作成
開発した画像処理・画像照合関数を用いてサンプルプログラムを作成した。図4に示すように、画像データベースと入力画像を照合し、一致する画像のインデックスを出力するプログラムである。(a) 開発した固定小数点演算関数、画像処理・画像照合関数ライブラリの性能を確認すること、(b)クラスタ計算機によるアプリケーション処理性能(並列処理性能)を評価することを目的とし、以下に示す合計6種類のプログラムを開発している。
● 浮動小数点版サンプルプログラム(poc:逐次処理、poc_mpi_fl:並列処理、poc_mpi_pt_fl:並列処理+マルチスレッド処理)
● 固定小数点版サンプルプログラム(poc_fixed:逐次処理、poc_mpi:並列処理、poc_mpi_pt:並列処理+マルチスレッド処理)
ただし、開発期間の都合上、すべての演算関数を使用したプログラムではないため、今後、継続して様々なサンプルプログラムの作成を行うことが重要である。

図 3 サンプルプログラムの概要
(5)サンプルプログラムの性能評価(クラスタ計算機によるアプリケーション処理性能の評価)
開発したサンプルプログラムでクラスタ計算機によるアプリケーション処理性能を評価した。開発したライブラリの性能を確認することとクラスタ計算機によるアプリケーション処理性能(並列処理性能)を明らかにすることを目的としている。評価は表1および表3に示した性能を有する2種類のクラスタ計算機で行った。評価内容は以下の通りである。
● 浮動小数演算と固定小数演算速度の比較。
● 逐次処理と並列処理(MPI)性能の比較。
● 並列処理(MPI)と並列処理+マルチスレッド処理性能の比較。
また、性能評価条件・方法は以下の通りである。
● データベース画像サイズ:128×128画素
● データベース画像数:16画像
● 測定関数:gettimeofday
(逐次処理)、MPI_Wtime (並列処理、マルチスレッド)
● 測定方法:プログラム内で10回の照合を行ない、この平均を測定時間として算出。
表7に評価結果を示す。
表 7 サンプルプログラムによるアプリケーション処理性能の評価

4.公開用ホームページの作成
本プロジェクトの成果を広く公開するためのホームページを作成した。図5にトップページを示す。

関連Webサイト
●
未踏プロジェクト成果公開用ページ
http://hyperion.ie.isenshu-u.ac.jp/ecc
●
ユビキタスコンピューティングクラスタサポートページ
http://hyperion.ie.isenshu-u.ac.jp/ucc
|