[問題] Matrix Multiplication 的陣列問題

看板C_and_CPP作者 (瀚宇)時間8年前 (2015/10/29 20:23), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/2 (看更多)
下列是一段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

10/29 20:37, , 1F
對齊, 在這樣調整過後 A B C 的位址會是 32 的倍數
10/29 20:37, 1F

10/29 20:37, , 2F
不懂這個的話就別管它沒關係, 它跟矩陣乘法演算法無關
10/29 20:37, 2F

10/29 20:52, , 3F
請問它的原理是什麼? 為什麼要讓address變32的倍數呢?
10/29 20:52, 3F

10/29 20:55, , 4F
不好意思,因為我蠻想了解這用法 :)
10/29 20:55, 4F

10/29 21:54, , 5F
32 bytes alignment for Intel AVX instructions.
10/29 21:54, 5F

10/30 01:08, , 6F
查了一下, 看起來像是下列網址:
10/30 01:08, 6F

10/30 01:08, , 7F

10/30 01:10, , 8F
其中 Week 5 的 Coursework zip檔中, CW.cpp 的部分內容.
10/30 01:10, 8F
文章代碼(AID): #1MCW-c-C (C_and_CPP)
文章代碼(AID): #1MCW-c-C (C_and_CPP)