Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC

< Previous PageNext Page >

アーキテクチャに依存しない行列乗算

Listing B-2に、行列乗算を実行する、アーキテクチャに依存しないベクトルコードを示します。PowerPC (-faltivec)またはx86 (-msse)用に適切なコンパイラフラグを設定していない場合、またはPowerPCでAltiVecが利用できない場合、このコードはスカラーとしてコンパイルされます。MyMatrixMultply関数で使用する行列は、2次元配列について、FORTRAN式の格納順序ではなく、C言語式の格納順序を前提としています。

Listing B-2  行列乗算を実行するアーキテクチャに依存しないコード

void MyMatrixMultiply( vFloat A[4], vFloat B[4], vFloat C[4] )
{
    vFloat A1 = vLoad( A );         // Aの行1
    vFloat A2 = vLoad( A + 1 );     // Aの行2
    vFloat A3 = vLoad( A + 2 );     // Aの行3
    vFloat A4 = vLoad( A + 3);      // Aの行4
    vFloat C1 = vZero();         // Cの行1、ゼロに初期化
    vFloat C2 = vZero();         // Cの行2、ゼロに初期化
    vFloat C3 = vZero();         // Cの行3、ゼロに初期化
    vFloat C4 = vZero();         // Cの行4、ゼロに初期化
 
    vFloat B1 = vLoad( B );         // Bの行1
    vFloat B2 = vLoad( B + 1);      // Bの行2
    vFloat B3 = vLoad( B + 2);      // Bの行3
    vFloat B4 = vLoad( B + 3);      // Bの行4
 
    // Bの第1行とAの第1列を乗算する(合計はしない)
    C1 = vMADD( vSplat( A1, 0 ), B1, C1 );
    C2 = vMADD( vSplat( A2, 0 ), B1, C2 );
    C3 = vMADD( vSplat( A3, 0 ), B1, C3 );
    C4 = vMADD( vSplat( A4, 0 ), B1, C4 );
 
    // Bの第2行とAの第2列を乗算し、
    // 前の結果に加算する(合計はしない)
    C1 = vMADD( vSplat( A1, 1 ), B2, C1 );
    C2 = vMADD( vSplat( A2, 1 ), B2, C2 );
    C3 = vMADD( vSplat( A3, 1 ), B2, C3 );
    C4 = vMADD( vSplat( A4, 1 ), B2, C4 );
 
    // Bの第3行とAの第3列を乗算し、
    // 前の結果に加算する(合計はしない)
    C1 = vMADD( vSplat( A1, 2 ), B3, C1 );
    C2 = vMADD( vSplat( A2, 2 ), B3, C2 );
    C3 = vMADD( vSplat( A3, 2 ), B3, C3 );
    C4 = vMADD( vSplat( A4, 2 ), B3, C4 );
 
    // Bの第4行とAの第4列を乗算し、
    // 前の結果に加算する(合計はしない)
    C1 = vMADD( vSplat( A1, 3 ), B4, C1 );
    C2 = vMADD( vSplat( A2, 3 ), B4, C2 );
    C3 = vMADD( vSplat( A3, 3 ), B4, C3 );
    C4 = vMADD( vSplat( A4, 3 ), B4, C4 );
 
    // 結果を書き込み先に書き込む
    vStore( C1, C );
    vStore( C2, C + 1 );
    vStore( C3, C + 2 );
    vStore( C4, C + 3 );
}


< Previous PageNext Page >


Last updated: 2006-03-08




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
Get information on Apple products.
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Copyright © 2007 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice