行列乗算プログラム
2007/05/30 東京工芸大学 後 保範 ( Ushiro Yasunori )
1. 概要
密実行列を係数とする行列乗算C=A*Bを計算するFORTRANとCのプログラム。
本プログラムは内容を理解してもらうことを目的としている。
行列乗算は下記4種類の方法を使用して、計算方式による実行性能を比較する。
(1) 非連続アクセス版(悪い例)
(2) 連続アクセス版
(3) アンローリング版
(4) キャッシュ用ブロック版
2. 行列乗算ルーチン
(1) 非連続アクセス版(悪い例)
(a) 計算方法 : FORTRANではIKJ、CではJKI順のループで計算する。
共に、悪い例で非連続なメモリ参照を行い性能が悪い。
(b) プログラム : FORTRAN |
とC |
(MULT1.c)のソースプログラム
(2) 連続アクセス版
(a) 計算方法 : FORTRANではJKI、CではIKJ順のループで計算する。
共に、連続なメモリ参照をする。
(b) プログラム : FORTRAN |
とC |
(MULT2.c)のソースプログラム
(3) アンローリング版
(a) 計算方法 : 連続アクセス版の外側の2つのループをそれぞれ2でアンローリングしている。
(b) プログラム : FORTRAN |
とC |
(MULT3.c)のソースプログラム
(4) キャッシュ用ブロック版
(a) 計算方法 : キャッシュの再利用を目的にブロック化して計算する。
ブロックサイズは利用する計算機に合せて入力する。
(b) プログラム : FORTRAN |
とC |
(MULT4.c)のソースプログラム
3. 性能テストプログラム
(1) 行列乗算性能テストプログラム
(a) 計算方法 :FORTRAN,C共に4種類の方式による乗算の性能テストを実施する。
行列の次元数とブロック数を入力する。計算時間とMFLOPSを出力する。
(b) プログラム : FORTRAN |
とC |
(TMULT.c)のソースプログラム