kernel/genericの下は使われてなさそうだが参考になるプログラムが多々ある。
これは、行列をキャッシュへ載せるためのプログラムだ。
C:=alpha AB + beta Cを行うわけだ。
レジスタ、キャッシュは使いきらず、半分程度にするのが肝要とのこと。
* kernel/generic/gemm_ncopy_4.c: 4x4の行列(訂正:4x4単位での行列??)のコピー。並べ替えあり。a->bで転置を取ってる。
* ブロックサイズ(レジスタ載せる)のはレジスタ総数の半分。SSE2ならば32/2=16レジスタ。
* Cは直接更新。A, Bはコピーする。L2, L3に載せる程度。
* Cでも高速なプログラムは可能。キャッシュにデータを載せるには、実際に書き込むこと。
これは、行列をキャッシュへ載せるためのプログラムだ。
C:=alpha AB + beta Cを行うわけだ。
レジスタ、キャッシュは使いきらず、半分程度にするのが肝要とのこと。
* kernel/generic/gemm_ncopy_4.c: 4x4の行列(訂正:4x4単位での行列??)のコピー。並べ替えあり。a->bで転置を取ってる。
* ブロックサイズ(レジスタ載せる)のはレジスタ総数の半分。SSE2ならば32/2=16レジスタ。
* Cは直接更新。A, Bはコピーする。L2, L3に載せる程度。
* Cでも高速なプログラムは可能。キャッシュにデータを載せるには、実際に書き込むこと。