Matrix Multiply命令
Matrix Multiply命令(行列乗算命令)とは、行列の要素同士を乗算し、その結果を加算する演算を行う命令です。
具体的には、行列Aと行列Bの積を計算する際に、行列Aの行と行列Bの列の要素をそれぞれ乗算し、その結果を加算して新しい行列Cの要素を求めます。
static Matrix4x4 Multiply(Matrix4x4 a, Matrix4x4 b)
{
var result = new Matrix4x4();
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
result[i, j] = 0;
for (int k = 0; k < 4; k++)
{
result[i, j] += a[i, k] * b[k, j];
}
}
}
return result;
}
上記では幾重にも重なる強烈なループ処理となっていますが、昨今のCPUやGPUでは1命令で実行できるSIMD演算化されているのが一般的です。
この演算はデジタル信号処理や科学計算などで非常に多く使用される基本的な演算です。
3DCGでも主に座標変換で使われる演算です。ただ座標変換はそれほど高負荷になる処理でもないため、スマホ向けなどの小規模なGPUではCPUのSIMD演算に同命令がある前提で省略されていることが多いです。
一方で昨今大流行している機械学習や人工知能では同命令は「主たる演算」となっています。このためパソコン向けのGPUでは同命令の回路規模がどんどん大きくなっており、業務用の人工知能特化型をうたうGPUにいたってはテクスチャーマッピングユニットなどを激減させてこの回路を盛り盛りしたものなどが登場しています。