「Matrix Multiply命令」の版間の差分

提供:MonoBook
編集の要約なし
編集の要約なし
28行目: 28行目:
この演算はデジタル信号処理や科学計算などで非常に多く使用される基本的な演算です。
この演算はデジタル信号処理や科学計算などで非常に多く使用される基本的な演算です。


3DCGでも主に座標変換で使われる演算です。ただ座標変換はそれほど高負荷になる処理でもないため、[[スマホ]]向けなどの小規模な[[GPU]]では[[CPU]]の[[SIMD演算]]に同命令がある前提で省略されていることが多いです。
3DCGでは主に座標変換(回転、拡大縮小、平行移動)で使われる演算です。ただ3DCGの定番である[[ゲーム]]で座標変換が高負荷になることはそれほどありません。そのため[[スマホ]]向けなどの小規模な[[GPU]]では[[CPU]]の[[SIMD演算]]に同命令がある前提で省略されていることが多いです。


一方で昨今大流行している[[機械学習]]や[[人工知能]]では同命令は「主たる演算」となっています。このため[[パソコン]]向けの[[GPU]]では同命令の回路規模がどんどん大きくなっており、業務用の人工知能特化型をうたう[[GPU]]にいたっては[[テクスチャーマッピングユニット]]などを激減させてこの回路を盛り盛りしたものなどが登場しています。
一方で昨今大流行している[[機械学習]]や[[人工知能]]では同命令は「主たる演算」となっています。このため[[パソコン]]向けの[[GPU]]では同命令の回路規模がどんどん大きくなっており、業務用の人工知能特化型をうたう[[GPU]]にいたっては[[テクスチャーマッピングユニット]]などを激減させてこの回路を盛り盛りしたものなどが登場しています。

2024年8月21日 (水) 05:34時点における版

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;
}

上記では幾重にも重なる強烈なループ処理となっていますが、昨今のCPUGPUでは1命令で実行できるSIMD演算化されているのが一般的です。

この演算はデジタル信号処理や科学計算などで非常に多く使用される基本的な演算です。

3DCGでは主に座標変換(回転、拡大縮小、平行移動)で使われる演算です。ただ3DCGの定番であるゲームで座標変換が高負荷になることはそれほどありません。そのためスマホ向けなどの小規模なGPUではCPUSIMD演算に同命令がある前提で省略されていることが多いです。

一方で昨今大流行している機械学習人工知能では同命令は「主たる演算」となっています。このためパソコン向けのGPUでは同命令の回路規模がどんどん大きくなっており、業務用の人工知能特化型をうたうGPUにいたってはテクスチャーマッピングユニットなどを激減させてこの回路を盛り盛りしたものなどが登場しています。