我想知道是否有辦法將數據直接存儲在處理器的數據緩存中,而不是存儲在主內存中。我明白緩存的工作方式是存儲最常用的數據,但是,有一個彙編指令告訴處理器是有意義的,這將是一個常用的數據。 我正在使用IA-32彙編語言。我可以直接將數據存儲在處理器緩存中嗎?
謝謝!
我想知道是否有辦法將數據直接存儲在處理器的數據緩存中,而不是存儲在主內存中。我明白緩存的工作方式是存儲最常用的數據,但是,有一個彙編指令告訴處理器是有意義的,這將是一個常用的數據。 我正在使用IA-32彙編語言。我可以直接將數據存儲在處理器緩存中嗎?
謝謝!
根據各自的體系,有預取的提示,直接將數據移動到緩存中。對於ia32,這是prefetch
指令,它可能會將數據移動到L1,L2。
在另一方面有指令告訴處理器避免使用緩存,像moventdq
,其直接移動數據從/到存儲器。
編輯:此外,還有設置存儲器中的指令的範圍爲特定類型的高速緩存算法,如寫回,寫通,寫結合或不可緩存。見http://en.wikipedia.org/wiki/Memory_type_range_register。
我不確定IA-32是否包含SSE。而且據我所知,不能保證在預取指令之後數據被存儲到緩存中。但我可能是錯的。 – n0p 2011-12-13 23:25:34
不,您不能直接在彙編級別訪問緩存。因爲處理器中的緩存「隱藏」(L1和L2),可能根本沒有緩存。
緩存對軟件來說(大部分)是透明的,所以沒有說明分開訪問緩存。這是因爲每個標準讀取或寫入指令都直接訪問緩存。另一種情況是,直接通過緩存訪問內存需要特殊指令,但它們確實存在。 – hirschhornsalz 2011-12-13 23:45:44
事實上,這是可以做到的,但這不是你想做的事情。論文:http://rere.qmqm.pl/~mirq/cache_as_ram_lb_09142006.pdf,幻燈片:https://www.coreboot.org/images/6/6c/LBCar.pdf。關於SO的相關問題:http://stackoverflow.com/questions/27699197/cache-as-ram-no-fill-mode-executable-code – jmiserez 2016-05-20 12:31:59