作者harristime (瀚宇)
看板C_and_CPP
標題[問題] Matrix Multiplication 的陣列問題
時間Thu Oct 29 20:23:00 2015
下列是一段Matrix Multiplication程式中宣告三個陣列A,B,C的一段程式,
請問各位知道星號內那段code的意思是什麼嗎?
感謝
#define N 2048
float *A, *B,*C;
float *AUnaligned, *BUnaligned,*CUnaligned;
void allocandpopulate() {
AUnaligned=A=new float[N*N+16];
BUnaligned=B=new float[N*N+16];
CUnaligned=C=new float[N*N+16];
***********
int alignA=(((unsigned long long) A) & 31)/4;
int alignB=(((unsigned long long) A) & 31)/4;
int alignC=(((unsigned long long) A) & 31)/4;
A+=8-alignA
B+=8-alignB
C+=8-alignC
************
for (int i=0;i<N*N;i++)
{
A[i]=(rand()+0.5f)/(RAND_MAX+1.f);
B[i]=(rand()+0.5f)/(RAND_MAX+1.f);
}
}
--
Sent from my Windows
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 137.44.91.1
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1446121382.A.F8C.html
推 LPH66: 對齊, 在這樣調整過後 A B C 的位址會是 32 的倍數 10/29 20:37
→ LPH66: 不懂這個的話就別管它沒關係, 它跟矩陣乘法演算法無關 10/29 20:37
→ harristime: 請問它的原理是什麼? 為什麼要讓address變32的倍數呢? 10/29 20:52
→ harristime: 不好意思,因為我蠻想了解這用法 :) 10/29 20:55
推 LiloHuang: 32 bytes alignment for Intel AVX instructions. 10/29 21:54
推 yvb: 查了一下, 看起來像是下列網址: 10/30 01:08
→ yvb: 其中 Week 5 的 Coursework zip檔中, CW.cpp 的部分內容. 10/30 01:10