[英]compiling gcc with -O3 technically increases my cache miss rate
我一直在使用 cachegrind 進行分析並注意到一些事情。 當我用 -O3 編譯時,我有較少的數據獲取,但相同數量的緩存未命中導致更高的未命中率。 這很棒,但對我來說似乎是一件有趣的奇怪的事情,我想知道幕后發生了什么。 我打開的唯一其他相關編譯器選項是 -march=native 。 為了比較,
不含 O3
==16951== D refs: 923,170,681 (817,941,424 rd + 105,229,257 wr)
==16951== D1 misses: 9,477,102 ( 8,115,150 rd + 1,361,952 wr)
==16951== LLd misses: 647,219 ( 262,227 rd + 384,992 wr)
==16951== D1 miss rate: 1.0% ( 1.0% + 1.3% )
==16951== LLd miss rate: 0.1% ( 0.0% + 0.4% )
含 O3
==16978== D refs: 218,804,125 (205,979,405 rd + 12,824,720 wr)
==16978== D1 misses: 9,372,533 ( 8,016,083 rd + 1,356,450 wr)
==16978== LLd misses: 647,195 ( 262,191 rd + 385,004 wr)
==16978== D1 miss rate: 4.3% ( 3.9% + 10.6% )
==16978== LLd miss rate: 0.3% ( 0.1% + 3.0% )
這很可能是由於矢量化:
-O3
Optimize yet more. -O3 turns on all optimizations specified by -O2
and also turns on ... -ftree-vectorize and -fipa-cp-clone options.
(來自 GCC 聯機幫助頁)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.