作者lions0164 (LionsHeart)
看板C_and_CPP
標題[問題] SIMD指令
時間Mon Jan 2 11:18:50 2012
最近學到了simd指令
可是對於很多地方還是不太懂
輸入是一個data.txt
裡面有 600 行 每行302個數字
然後分成 300*302 兩個矩陣
要做的運算是
將第一個矩陣的第一的每個數字列 去乘上 第二個矩陣的每一列的每個數字加起來
ex:
A: 1 2 3 4 B: 5 6 7 8
5 6 2 1 1 3 4 2
6 7 4 1 2 3 5 6
A的第一列乘上b的第一列然後每個數字加起來 再去乘B的第二列再加起來
再乘第三列加起來得到第一個數字 然後變成a的第二列作一樣的事...
這是我的程式
http://nopaste.csie.org/ecd37
在第40行那 編譯後會說需要浮點數時使用聚合值
改了一下之後 可以跑 可是會出現bus error
另外就是 simd指令是一次最多只能作4個相加嗎?
還有就是做完加法後 要怎麼把每個數字都加起來?
試過 在用一個float指標去重新接它並改變型態
可是跑得時候就出現bus error 不知道是停在那
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.74.102
→ chengcti:爆掉了,只有四組可以用,你超過了... 01/02 12:05
→ chengcti:多組請利用_mm_hadd_ps()來處理. 01/02 12:07
→ lions0164:sc[i]=_mm_mul_ps(sa[i],sb[i]); 這樣是只有作一個數 01/02 13:18
→ lions0164:字的乘法嗎? 01/02 13:19
※ 編輯: lions0164 來自: 114.47.74.102 (01/02 15:42)
推 tingyushyu:4個 01/02 22:33
→ illusionk:你用float還是改變不了他是__m128的事實,兩個不太一樣 01/02 23:28
→ illusionk:sc裡面其實會存四個值,類似sc[4]這樣的array 01/02 23:31
→ illusionk:你把它們全部塞在一格裡當然就爆炸了 01/02 23:32
※ 編輯: lions0164 來自: 114.47.74.102 (01/04 00:28)