關于C64x+ DSP高速緩存一致性分析與維護
高速緩存一致性問題分析
在任何時刻,內核或者其它主機訪問存儲器中數據時,由于CACHE的存在造成不能夠得到最近更新過的數據,就會出現CACHE一致性問題。CACHE的一致性問題分為兩個大類:內核讀一致性問題和內核寫一致性問題。在下面兩個小節(jié)中,分別描述了這兩種情況的模型:
內核讀一致性模型
圖 3給出了內核讀一致性的模型。在這個模型中,CACHE一致性問題的存在取決于圖中虛線箭頭指示的第二步操作能否在內核從CACHE中重新讀數據之前完成。如果不能,則會造成內核讀取的數據不是其它主機更新后的數據,而是原來CACHE中的內容,從而導致一致性的問題。
圖 3 內核讀一致性模型
L1P CACHE對L2內存或者DDR2外存中的代碼進行緩存。當內核第一次對L2或者DDR2中的代碼進行讀操作的時候,由于代碼不在L1P CACHE中,CAHCE硬件會將L2或者DDR2中的代碼讀到L1P CACHE中。內核可以得到最新的代碼,不存在一致性的問題。此后,如果其它主機更新L2或者DDR2中的代碼,然后內核再次讀取此部分代碼時,會發(fā)現相應的代碼已經存在L1P CACHE中,此時內核會直接從L1P CACHE中讀取代碼。由于內核不能得到最新的代碼,就出現了內核讀一致性的問題。L1D 內核讀一致性問題的原理和L1P相同,只是L1D緩存的是L2或者DDR2中的數據。
內核寫一致性模型
圖 4給出了內核寫一致性的模型。在這個模型中,CACHE一致性問題的存在取決于圖中虛線箭頭指示的第二步操作能否在其它主機從存儲器中讀數據之前完成。如果不能,會造成其它主機從存儲器中讀到的數據是原來的數據而不是內核更新過的數據,從而導致一致性的問題。
圖 4 內核寫一致性模型
當內核對L2或者DDR2中的代碼/數據進行寫操作的時候,如果代碼/數據已經在L1 CACHE中,新的代碼/數據會被更新到L1 CACHE中。當其它主機從L2或者DDR2中讀代碼/數據的時候,會直接從L2或者DDR2中讀取相應的內容,如果L1 CACHE中新的代碼/數據未被更新到L2或者DDR2中,則其它主機讀取的不是更新后的內容,就會出現內核寫一致性的問題。
C64x+ 一致性分析
C64x+上的CACHE一致性問題,需要根據放置代碼/數據的相應位置進行分析。由于在C64x+平臺上,L1P、L1D和L2內存既可以作為CACHE又可以作為存儲器使用,因此,在分析一致性問題的時候,需要考慮以下幾種情況:
1) 代碼在L1P存儲器中;2) 代碼在L2存儲器中;3)代碼在DDR2存儲器中;4)數據在L1D存儲器中;5)數據在L2存儲器中;6)數據在DDR2存儲器中。
對于1),由于代碼直接在L1P存儲器中,不需要進行CACHE,所以不會存在一致性的問題。
對于2)和3),涉及到L1P CACHE,存在代碼的更新能否被內核讀到的問題。代碼的更新分成兩種情況:一是內核在運行過程中對代碼進行修改;二是其它主機對代碼的修改。這兩種情況下,都會存在CACHE讀一致性問題,需要由軟件來維護。
對于4),數據直接在L1D存儲器中, 內核始終能夠讀到其它主機更新到L1D內存中的內容,內核寫過的數據也能夠被其它主機直接從L1D內存中讀到。所以不會存在一致性的問題。
對于5),數據在L2存儲器,按照上面的分析,會存在CACHE讀和寫一致性的問題。在C64x+平臺上這種情況下的一致性問題會由硬件自動維護。
對于6),也會存在CACHE讀和寫一致性的問題,這種情況需要軟件進行CACHE一致性的維護。
評論