Kilroy Was Here

不定期更新の技術ブログ

.NET Core 2の高速化

Microsoftは「PGO (Profile-Guided Optimization )」について伝えた。

この技術は、C++コンパイラで最適化されたコードを生成するために

使われているネイティブコンパイラ技術であり、.NET Core 2.0でも

採用されている。

news.mynavi.jp

ちなみに、PGOは、使用頻度の高い関数のバイナリサイズの

増加を許し、使用頻度の低い関数は小さくするというものだ。

また、使用頻度が多いコードから離れたメモリの位置に

使用頻度の少ないコードを配置することで、CPUのキャッシュを

有効的に使い、全体のパフォーマンスを向上させている。

 

Microsoftは、「すべてのユーザは特定の処理をすることなく、

恩恵を受けている」とPGOについて説明している。

ただし、適用されているのは現状Windowsに対してのみであり、

Linuxではまだ効果的に機能していない部分があるとのことで、

改善の余地は残されている。

f:id:samsoda:20170723093524j:plain

また、JIT技術についてはRyuJITに統一し、高速化を実現したとのこと。

RyuJITは起動に時間がかかるという問題点を抱えているが、

この点をPGO技術との併用で改善したとしている。