行列数値ホットスポットを最適化しています。
現在、パフォーマンスを向上させるためにブロッキングとループ展開を行っています。ただし、わざと縁を剥がすのは避けています。代わりに、ブロッキング ステップをオーバーフローさせます。もちろん、アルゴリズムは初期化されていない値に触れます。
ただし、行列はオーバーフローに対処するために事前に十分に割り当てられているため、実際にメモリ位置に不正にアクセスすることはありません。
私はいくつかの理由でピーリングをしません。
- 怠惰
- ピーリング ボーダー ケースの局所性が非常に悪いため、パフォーマンスが低下しました。
- 複雑なボーダー ピーリング コードを回避するため。
しかし、初期化されていない値に触れるこれらのオーバーフローしたアクセスが実際にパフォーマンスの低下を引き起こすかどうか疑問に思っていますか?
初期化されていないアクセスがどこで発生するかは予想通りわかっており、それらも valgrind を介して報告されています。Intel の VTune を使用してコードのプロファイリングも行いましたが、これによるパフォーマンスの低下を示す兆候は見られませんでした。