GPGPU#4

このエントリーをはてなブックマークに追加
552,,・´∀`・,,)っ-○○○
たとえば>>420のD3DMATRIX互換データ構造の4x4行列積を求めるコードの場合
v1-v4で表現したベクトルが回転行列で、
複数の座標にたいして同じ回転を加えたい、というケースならば
対象となる行列の数が増えればFLOPS数は理論値の70%程度に近づく。

Larrabeeだとvloadd 1回に対しvmulpsを1回, vmadd231psを3回。
vstoredはスカラパイプ側で処理できる。
スカラ側にあと4命令分、何か命令を挟み込める。
たとえばvprefetchとかでデータの先読みができる。

Cellで同じことをやると、積和がevenパイプ16回の操作に対して
oddパイプの操作は計24回(4ロード+16シャッフル+4ストア)
しかもストリーム処理に必要なMFC DMAコマンドを発行するにもodd
パイプラインなんで、ますますodd側がネックになる。

Cellは128ビットSIMDのくせして実はLarrabeeよりも小回り利かない。