如何在高速緩存邊界對齊數據結構

挑戰
確保每個同步變量都獨自位於一個高速緩存行上。 正如我們在如何避免錯誤共享 中所討論的那樣,當將同步結構拉伸至高速緩存行的大小後,必須確保同步結構在高速緩存邊界上對齊。

解決方案
利用下面給出的適當編碼技術,將數據結構在高速緩存邊界上對齊。 將同步結構拉伸爲高速緩存行的大小並不能說是完全大功告成。您還需確保同步結構在高速緩存邊界上對齊。同步變量不能與另一個同步結構位於相同的高速緩存行上,如果同步結構沒有在高速緩存邊界上對齊,則同步變量無法獨自位於一個高速緩存行上。可以採用下面兩種技術中的一種來執行對齊。

針對動態內存,採用如下代碼片斷:

struct syn_str { int s_variable; };

void *p = malloc ( sizeof (struct syn_str) + 127 );

syn_str * align_p = (syn_str *)( (((int) p) + 127) & -128 );

當使用英特爾 C/C++ 編譯器時,也可採用下面的代碼片斷:

_declspec(align(128)) struct syn_str aligned_structure;

欲瞭解這些代碼片斷的更多內容,以及它們在實際情形中的使用,請參閱本主題 "資料來源" 中引用的應用註釋。

資料來源
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章