我在C中編寫了一個多線程程序,其中一個內核週期性地從鏈表的頭部抓取一個項目,而其他核心將項目附加到列表的後面(使用CAS魔術來實現線程安全,其他人則爲此提供了我)。看起來我的程序運行速度會更快,如果核心從列表頭開始預取下一個項目,肯定會在另一個核心的緩存中進行預取。如何預取C中的指針,以AMD Opteron 6168爲目標?
目前我的目標是使用Debian Linux上的gcc編譯AMD Opteron 6168:我試圖爲此找到文檔,但我處於陌生的水域。我所能找到的全部是使用-O3來啓用編譯器插入的預取(我認爲是循環),以及一些提到的AMD預取指令名稱,如PREFETCHW。
我不知道如何找到我之後的參考,或者如何將這樣的語句插入到C中,也許作爲一個程序集塊?
你可以從頭部消耗並追加到尾部的鏈表被稱爲隊列......! – 2010-10-13 22:45:23
爲什麼下一個項目* SURE *在另一個CPU緩存中?這可能是極有可能的,但是什麼*保證*這個? – 2010-10-13 22:46:30