マガジンのカバー画像

行列積計算を高速化してみた

30
数値計算ライブラリBLASに含まれる行列積ルーチンDGEMMを高速化していく手順を記した記事「行列積計算を高速化してみる」の章ごとに分割した記事をまとめたマガジンです。元の記事は…
運営しているクリエイター

#ループ交換

はじめに|行列積高速化#0

以前書いた行列計算DGEMMを高速化する記事が、あまりに長すぎた(20万文字以上)ので、記事あたり1万字以内を目安に、章ごとに記事を分割することにしました。 元の記事が有料記事のため、高速化の重要なカギになる章は有料にさせていただいています。全記事をご購入いただくと1000円になります。元の記事は560円ですので、全ての章を読むなら元の記事の方が割安になっています。一部の章は元の記事で有料部分に含まれていましたが、分割したので無料でもお読みいただけるようになりました。 元

ループ交換2回目|行列積高速化#10

この記事は、以下の記事を分割したものです。 [元の記事]行列積計算を高速化してみる 一括で読みたい場合は、元の記事をご覧ください。 さて、カーネル関数を切り出したため、myblas_dgemm_main関数はだいぶスッキリしました。 // scaling beta*Cblock2d_info_t infoC = {M,N,1,1};myblas_dgemm_scale2d(beta,C,ldc,&infoC);double* A2 = calloc( MYBLAS_B

ループ交換1回目|行列積高速化#7

この記事は、以下の記事を分割したものです。 [元の記事]行列積計算を高速化してみる 一括で読みたい場合は、元の記事をご覧ください。 L1キャッシュブロッキングループの順序を、下記のようにKループを外側に変更しました。こうすると、行列B2の最初のメモリロード回数を減らすことができるためです。 <変更前> // L1 cache for( size_t j1=j2; j1<j2+N2; j1+=MIN(N-j1,MYBLAS_TILE_N ) ){ f