看板 C_and_CPP 關於我們 聯絡資訊
最近學到了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)