看板 C_and_CPP 關於我們 聯絡資訊
下列是一段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