[問題] SIMD指令

看板C_and_CPP作者 (LionsHeart)時間12年前 (2012/01/02 11:18), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/2 (看更多)
最近學到了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

01/02 12:05, , 1F
爆掉了,只有四組可以用,你超過了...
01/02 12:05, 1F

01/02 12:07, , 2F
多組請利用_mm_hadd_ps()來處理.
01/02 12:07, 2F

01/02 13:18, , 3F
sc[i]=_mm_mul_ps(sa[i],sb[i]); 這樣是只有作一個數
01/02 13:18, 3F

01/02 13:19, , 4F
字的乘法嗎?
01/02 13:19, 4F
※ 編輯: lions0164 來自: 114.47.74.102 (01/02 15:42)

01/02 22:33, , 5F
4個
01/02 22:33, 5F

01/02 23:28, , 6F
你用float還是改變不了他是__m128的事實,兩個不太一樣
01/02 23:28, 6F

01/02 23:31, , 7F
sc裡面其實會存四個值,類似sc[4]這樣的array
01/02 23:31, 7F

01/02 23:32, , 8F
你把它們全部塞在一格裡當然就爆炸了
01/02 23:32, 8F
※ 編輯: lions0164 來自: 114.47.74.102 (01/04 00:28)
文章代碼(AID): #1F0I8Yr5 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1F0I8Yr5 (C_and_CPP)