# 2017q1 Homework3 (software-pipelining) contributed by < `heathcliffYang` > ## 論文閱讀 ### 背景知識 因為背景知識的不足,所以我決定先試著硬讀一遍,把不懂的都標注起來(有些不懂的在論文後面會接著說明),去查完所有不懂的東西之後,再讀一遍。 #### Cache 在整個 memory hierarchy 中,是相對小、快的 memory,只由硬體機制來掌控。 1. 可以儲存最近會被使用到的資料,使對 main memory 的存取加速。 2. 在多處理器的系統中,可以作為 shared memory,減少 system bus 與 MM traffic 的需求。 3. Principles of locality : - Temporal locality : Data which have been used recently have high likelihood of being used again. - Spatial locality : If a data is referenced, it is very likely that nearby data will be accessed soon. 4. Three Structures : - Fully associative cache - Direct mapped cache - Set associative cache 5. Two types : * **Block / line** : 資料在 cache 裡或被搬移的最小單位 #### Prefetching CPU 在真正需要用到該資料/指令之前,就先提出要求,藉由減少等待指令或資料的時間,讓 CPU 可以加速執行程式。 - 當資料/指令被要求時,會先被放置在 cache 裡,這會比從 memory 拿還快;此外, prefetching 可以掩蓋 memory access latency (從 request 直到 CPU 拿到資料的時間),也就可以拉近記憶體存取速度與處理器運算速度之間的落差。 - 這項技術也會是分支預測的一部分。 - Prefetch 的種類 - **Data / instruction prefetching** 用在 data block / instruction block 。其中,相較於 instruction access,data access 比較沒有一定的規律,所以 data prefetching 的準確性較低。 - **Hardware prefetching** 用額外的硬體裝置去偵測 access patterns ,之後根據偵測結果做出對應的 prefetch 要求。 - **Software prefetching** Programmer 或 compiler 基於對程式的行為的了解,在程式碼裡面插入 prefetch instrinsics。 - Prefetch metrics - Prefetch degree : 在每次做 prefetching 時用到的 cache line 的數量。 - Prefetch distance : 可以針對多遠的資料/指令 stream 做 prefetching。 - Cache prefetching 利用先將預測可能會用到的 instruction / data 先從存取速度較慢的記憶體 fetch 到存取速度較快的 ==local memory==。 - Coverage : (Cache misses eliminated due to prefetching) / (Total cache misses) - Accuracy : (Cache misses eliminated due to prefetching) / (Useless cache prefetches + Cache misses eliminated by prefetching) - Timeliness : >> Consider a for loop where each iteration takes 12 cycles to execute and the 'prefetch' operation takes 3 cycles. This implies that for the prefetched data to be useful, we must start the prefetch 12/3=4 iterations prior to its usage to maintain timeliness. >> >> 不懂維基百科上為何會這樣算? 1. GHB 2. STR 3. Training effect ### 疑惑 1. Execution time -> normalization 的方法,以及 Fig. 1 的 Norm. Execution cycle 的意思 2. Baseline 的實作到底是只有 SW prefetch 還是只有 HW prefetch? 3. Section 3.2 的 Figure 4 中,others 跟 prefetch 到底是什麼關係? ### 心得 因為是論文的關係,所以有很多藏在文章裡的描述與細節,如果是一篇好的分析,應該條列式列出每個實驗的主要探討因素。 ## Prefetch 實驗 ### Cache_test ``` Performance counter stats for './main_naive' (100 runs): 19,098,020 cache-misses # 96.506 % of all cache refs ( +- 0.04% ) 19,789,367 cache-references ( +- 0.13% ) 2,187,809,082 instructions # 1.29 insns per cycle ( +- 0.49% ) 1,690,332,635 cycles ( +- 0.41% ) 0.593995654 seconds time elapsed ( +- 0.66% ) ``` ``` Performance counter stats for './main_sse' (100 runs): 6,963,624 cache-misses # 81.878 % of all cache refs ( +- 0.08% ) 8,504,869 cache-references ( +- 0.15% ) 2,602,566,869 instructions # 1.49 insns per cycle ( +- 0.28% ) 1,750,195,508 cycles ( +- 0.38% ) 0.617119812 seconds time elapsed ( +- 0.65% ) ``` ``` Performance counter stats for './main_sse_prefetch' (100 runs): 7,058,261 cache-misses # 91.616 % of all cache refs ( +- 0.08% ) 7,704,204 cache-references ( +- 0.17% ) 2,013,680,676 instructions # 1.72 insns per cycle ( +- 0.06% ) 1,172,678,900 cycles ( +- 0.31% ) 0.420111002 seconds time elapsed ( +- 0.77% ) ``` ## 參考資料 - [Instruction prefetch From Wikipedia](https://en.wikipedia.org/wiki/Instruction_prefetch) - [Prefetching of CMU lecture](http://www.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php%3Fmedia%3Dwiki:lectures:onur-740-fall11-lecture24-prefetching-afterlecture.pdf)