簡體   English   中英

可用於控制數據/指令進/出緩存的技術?

[英]Techniques available to control data/instructions in/out of the cache?

我遇到了一些英特爾編譯器的內在函數,我相信它們可以允許開發人員繞過緩存嗎?

http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran-mac/GUID-AF42A867-B796-4D29-8FED-C20193FD87E0.htm

我也遇到過GCC編譯器的prefetch關鍵字,盡管我不能完全理解它的作用。

考慮到以上內容,我想知道是否有任何成員可以詳細說明以上內容(我對此進行了錯誤描述)或提供其他技術,使開發人員可以密切控制哪些數據(或指令)已加載/未加載到CPU中。緩存?

該頁面包含有關所有內部函數的大量信息:

英特爾固有技術指南

避免緩存驅逐而將數據寫入內存的一系列指令通常稱為_mm_stream_... 顧名思義,它們是寫大量數據的應用程序的理想之選,這些數據流基本上在內存中是連續的,不太可能在不久的將來再次訪問。 因此,例如,如果您要混合音頻緩沖區並產生單個波形輸出,則效果很好。

有效使用這些指令的關鍵之一是利用寫入組合。 如果您的寫入位置分散在整個內存中,那么這些指令將比您嘗試的任何其他類型的內存存儲指令都更嚴重,甚至可能更糟。 由於這些寫操作不會在高速緩存中結束,因此,如果您不填充整個寫緩沖區,那么實際上您的操作將成為直寫操作,需要暫停直到寫操作完成。 如果要寫入連續的內存位置,則將應用寫入合並,並使數據寫入效率更高。

該硬幣的反面是預取。 預取告訴系統開始將內存地址拉入所需的緩存級別,以便在內存讀取完成時就可以使用數據了。 這很難使用,並且需要適當的數據“步幅”,其中要考慮到高速緩存大小,高速緩存行大小以及在內存讀取完成之前可以執行的指令數。 使用提示參數,您可以“建議”數據進入L1,L2或L3高速緩存,或者它是“非臨時性”的,這意味着您只需要使用一次就應該將其逐出首先,在任何其他緩存逐出之前。 硬件具有自己的預取試探法,可以在沒有明確的預取指令的情況下很好地解決大多數問題,但是經典的反例是矩陣轉置:

預取示例

除了在某些非常特殊的情況下,預取通常很難有效使用。 沒有您的更具體的問題說明,這就是我所能提供的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM