SIMD和多核心程式設計時的一些總結。

2021-06-09 19:16:16 字數 530 閱讀 3074

1  在計算過程中不涉及輸出記憶體的資料時,應使用_mm*_stream_*(直接寫入記憶體)代替_mm*_store_*,例如:

for( i=0; i<256; i+=4 )

若計算過程中還要使用輸出記憶體中的資料,則應使用_mm*_store_*,例如:

for( i=0; i<256; i+=4 )

2  多個核心之間共享資料的使用時間應盡可能的靠近,這樣可以比較充分的利用l3共享快取提高頻寬。

3  如果同時使用simd和mc,則應該先進入bios關掉超執行緒,預設情況下每個核心有兩個執行緒,但卻只有一組物理simd暫存器。

這樣多個執行緒之間就會存在額外的上下文切換開銷,往往得不償失。

4  有時候會重複使用某些小的資料塊,而該資料塊中的位元組數不足以對映到整數個快取行,為了避免快取行被使用前就被汙染使用固定大小的陣列+padd擴充套件至整倍數的快取行大小。

5  有些情況下,同時使用simd和mc的效能

甚至不如只使用simd或者mc,這時應優先考慮simd,應為其更輕量級,且不存在多個核心之間的同步開銷。

關於多核的一些概念和區別

多核處理器 cmp 就是將多個計算核心整合在乙個處理器晶元中,從而提高計算能力。按計算核心的對等與否,cmp可分為同構多核和異構多核。計算核心相同,地位對等的稱為同構多核。反之稱為異構多核。多處理器指多個cpu,每個cpu可以是單核或多核的。雖然同時使用多個cpu,但是從管理的角度來看,它們的表現就...

linux shell script 的一些總結

獲得本機inet ip sbin ifconfig eth0 grep inet addr sed s addr g sed s bcast.g 刪除空白行 cat etc man.config grep man sed s g sed d egrep與grep egrep grep e egrep...

關於Spring Data Rest的一些總結

最近一直在開發一些基於 spring data rest 的專案。在此過程中,隨著開發工作的不斷深入,對 spring data rest 的了解也越來越深。享受著 spring data rest 帶來的便捷,也忍受著它帶來的不便。spring data rest 的目標是提供堅實的基礎,從而使用...