2009年3月6日 星期五

SIMD programming -- 雙魚

文件名稱:Cell Broadband Engine Programming Handbook
從第22章「SIMD Programming」開始看
已經看完第一節 SIMD Basics

∮SIMD Basics
1. SIMD: one instruction to be applied to the multiple data elements of a vector in parallel
2. Vectors are also called SIMD operands or packed operands.

→ 一個vector裡有4個element

3. SIMD coding 舉例

→ 一般作法是先把 b[1]、c[3]先load出來,將兩者相加後store回a[2]

→ SIMD作法則是把b、c memory stream都向左shift,利用 vector-add instruction 把數值相加,相加完的數值先向右shift,再存回a中對應的位置。

4. Auto-SIMDization:有些撰寫程式要注意的準則,按照準則能讓程式被Compiler有效地SIMDized
(1) Memory 要 data aligned,data存在記憶體中要盡量對齊。
(2) 盡量用array,不要使用pointer去存取資料。
(3) Function calls are not SIMDizable,因為Compiler可能會不知道function call 裡面的code,最好用 marco 跟 inline。

(4) Trip Count 至少要超過3次,否則Compiler不知道alignment。
→ trip count=4,如果a[0] is aligned 可以 auto-SIMDized

(5) 有相同的Left hand value比較好,可以用select bits instruction來SIMDize。

→ if – else部份可以改成 m[i] = a[i] > b[i] ? a[i] * 2 : b[i] * 3 ;







































4 則留言:

centcent 提到...

可以自我介紹一下嗎?
不要被BBB帶壞了 哈

匿名 提到...

可以把他歸類在Multicore與Cell下嗎?

感謝!

逼逼逼 提到...

太棒了~寫的不錯唷~
希望文件中能更詳細^^
在我的印象,在第五點"Left hand value"指的是array中同樣的偏移量嗎?如果不是則要特別處理,不能直接使用compiler SIMDize。

SCREAMLab 提到...

我建議可以試著將Motion Compensation (MC)的部分改一下, 看可不可以用 SIMD 來做. MC雖然計算量不大, 但是成是簡單易懂, 因為只是兩個block相減.