Cell Broadband Engineを利用したホログラム計算(後編)

柘植 宗範,伊藤 智義

tag: 組み込み

技術解説 2008年1月31日

 ホログラムに変換する計算式は,次に示すようなcos関数の重ね合わせです.以下の式に物体点の座標を入力していくと,ホログラム上のある座標における計算値が求まります.

siki01_01.gif

 ここで,添え字のαはホログラム上の点を,jは物体を構成する点を表しています.x,y,zは座標を表し,xαj=xα-xj,yαj=yα-yjです.Ajは物体光の強度,λは参照光の波長,Nは物体点の総数です.

 ホログラムの画素数をMとすると,1枚の計算機合成ホログラムを作成するために上の式のcos計算をM×N回行う必要があり,リアルタイムに動画を再生するためには30フレーム/s程度のビデオ・レートが要求されます.そのための計算量は膨大であり,計算機合成ホログラムを用いた電子ホログラフィによる3次元テレビの実用化には,今後10年~20年を要するともいわれています.

 実際にはホログラムに変換する計算式をコンピュータに実装して計算するわけですが,この式の場合,計算するホログラムの各画素間に依存関係(ある画素Aの計算結果を別の画素Bの計算で用いるなど)がありません.非常に並列処理しやすい計算であることが知られています.

 この特徴を利用して,計算機合成ホログラムの計算プログラムをCBEに移す際に高速化を図ります.計算用のデータの読み込みなどはPPE側でしか実行できないので,PPEに任せます.その後の実際の計算式の部分はSPEに実装します.

 以下に,実際のPPEとSPEのプログラムの一部(CBE特有の部分)を示しながら,CBEのプログラミングについて解説します.

● PPE用プログラムを作成する

 PPEのプログラムの大きな特徴は,プログラム内でSPEプログラムのスレッドの呼び出し(または終了)を確認して停止させる関数群と,SPEプログラムがDMA転送を利用してメイン・メモリからデータを転送するためにデータを格納・加工する部分です.以下に例を挙げて解説します.

1)ライブラリのインクルード

 PPEからSPEを利用するためのlibespe2ライブラリとスレッドの生成や管理などを行う関数群を持つpthreadライブラリをインクルードします〔リスト1(a)〕

#include <libspe2.h>
#include <pthread.h>


リスト1 PPE用プログラム (a)ライブラリのインクルード

2)DMA転送用領域の確保

 まず,SPEプログラムに渡す入力データと出力データのための領域を宣言します.

 DMA転送に用いるパラメータをまとめた構造体を作成し,メイン・メモリ上にDMA転送用パラメータの領域を確保します.DMA転送を行うデータは,基本的に16バイトの倍数になります.DMA転送では128バイトが最適なので,__attribute__キーワードを指定してバイト境界を128バイトにそろえます〔リスト1(b)〕

typedef struct{
  KATA *dataPos;      // メイン・メモリ上の演算用データ格納場所
  KATA *resultPos;    // メイン・メモリ上の演算結果格納場所
  char pat[] __attribute__((aligned(128)));
                  // データ・サイズ調整用
}DmaParams __attribute__((aligned(128)));
static volatile DmaParams dmaParams[NUM_SPE] __attribute__((aligned(128)));


リスト1 PPE用プログラム (b)メイン・メモリ上にDM転送用パラメータの領域を確保

 また,メイン・メモリ上に結果格納用の領域を確保します〔リスト1(c)〕.

static volatile unsigned char result __attribute__((aligned(128)));


リスト1 PPE用プログラム (c)メイン・メモリ上に結果格納用の領域を確保

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日