SIMD和多核心編程時的一些總結。

來源:互聯網
上載者:User

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

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

{

    ymm0=_mm256_load_pd(a+i);

    ymm1=_mm256_load_pd(b+i);

    ymm2=_mm256_add_pd(ymm0,ymm1);

    _mm256_stream_pd(c+i,ymm2);

}

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

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

{

    ymm0=_mm256_load_pd(a+i);

    ymm1=_mm256_load_pd(b+i);

    ymm2=_mm256_load_pd(c+i);

    ymm3=_mm256_add_pd(ymm2,_mm256_mul_pd(ymm0,ymm1));

    _mm256_store_pd(c+i,ymm3);

}   

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

3  如果同時使用SIMD和MC,則應該先進入BIOS關掉超執行緒,預設情況下每個核心有兩個線程,但卻只有一組物理SIMD寄存器。這樣多個線程之間就會存在額外的環境切換開銷,往往得不償失。

4  有時候會重複使用某些小的資料區塊,而該資料區塊中的位元組數不足以映射到整數個緩衝行,為了避免緩衝行被使用前就被汙染使用固定大小的數組+PADD擴充至整倍數的緩衝行大小。

5  有些情況下,同時使用SIMD和MC的效能甚至不如只使用SIMD或者MC,這時應優先考慮SIMD,應為其更輕量級,且不存在多個核心之間的同步開銷。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.