私はすべての行主要な列の主要な背後にあるロジックを見つけるためにGoogleの上に行ってきたが、私の質問の答えを見つけるように見えなかった。
私の質問は次のとおりです:
私は行列の次元の3つのタイプがあります。 5x50000,500x500,50000x5。 3つすべてが250000の同じ倍数を持つことになります。しかし、これらの乗算が行メジャーで行われると、なぜ5x50000行列が実行に最も時間がかかりますか?私はこれがキャッシュと関係していることを知っています。私のマシンはL1 32K、L2 256K、L3 8192kを持っています。Cで行優先の乗算マルチスレッディング
私はCプログラムの配列が連続した行を最速にすることを理解していましたが、私の質問はこれと何が関係しているのですか?5x50000マトリックスが最悪になりますか?それは大きな柱を持っているからでしょうか?と500x500が最適ですか?
説明は非常に役に立ちます。おかげさまで
私が覚えている限り、2つの行列M1とM2を乗算するには、M1の列の数をM1の行の数と等しくする必要があります。 – babon
はい、もちろん!私は問題の行列の次元(rowxcol)を指定しました。私のコードでは、ロジックはA [i] [j] = A [i * n + j]です。ここで、iとjは行列Aの行インデックスとcolインデックス、そしてnは列の数です。これは行優先の乗算です。 – Dee
どのような順序で3つの行列を掛けていますか? – babon