行列乗算プログラム

        2003/08/28 日立製作所 & 早稲田大学 後 保範 ( Ushiro Yasunori )

1. 概要

 密実行列を係数とする行列乗算C=A*Bを計算するFORTRANとCのプログラム。
本プログラムは内容を理解してもらうことを目的としている。
行列乗算は下記4種類の方法を使用して、計算方式による実行性能を比較する。
 (1) 非連続アクセス版(悪い例)
 (2) 連続アクセス版
 (3) アンローリング版
 (4) キャッシュ用ブロック版

2. 行列乗算ルーチン

(1) 非連続アクセス版(悪い例)

 (a) 計算方法 : FORTRANではIKJ、CではJKI順のループで計算する。
      共に、悪い例で非連続なメモリ参照を行い性能が悪い。
 (b) プログラム : FORTRANCのソースプログラム

(2) 連続アクセス版

 (a) 計算方法 : FORTRANではJKI、CではIKJ順のループで計算する。

      共に、連続なメモリ参照をする。
 (b) プログラム : FORTRANCのソースプログラム

(3) アンローリング版

 (a) 計算方法 : 連続アクセス版の外側の2つのループをそれぞれ2でアンローリングしている。
 (b) プログラム : FORTRANCのソースプログラム

(4) キャッシュ用ブロック版

 (a) 計算方法 : キャッシュの再利用を目的にブロック化して計算する。
      ブロックサイズは利用する計算機に合せて入力する。
 (b) プログラム : FORTRANCのソースプログラム

3. 性能テストプログラム

(1) 行列乗算性能テストプログラム

 (a) 計算方法 :FORTRAN,C共に4種類の方式による乗算の性能テストを実施する。
      行列の次元数とブロック数を入力する。計算時間とMFLOPSを出力する。
 (b) プログラム : FORTRANCのソースプログラム