Re: [問題] Matrix Multiplication 的陣列問題

看板C_and_CPP作者時間8年前 (2015/10/29 22:20), 編輯推噓6(602)
留言8則, 7人參與, 最新討論串2/2 (看更多)
其實原理很簡單 只要從這幾點考量 1. 最後我得到的起頭是對齊32的 1. 最後我得到的起頭往後數有N個 1. 我要的位置開頭可能落在任何%32的位置 1. 所以我應該要大一點(最不幸的情形下要多多少?),拋棄掉前面 1. 我要到大一點之後我要怎麼取得有對齊的起頭 從這幾點其實就很好理解這個 code 了 至於為什麼要 32 的倍數 推文中的 SSE/AVX 之類的是一個可能 也可能只是要作 tiling 有 $ line 的考量 $ line 一般是 64 或是 128B ※ 引述《harristime (瀚宇)》之銘言: : 下列是一段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); : } : } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.175.53 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1446128402.A.6BE.html

10/29 22:23, , 1F
頭一次看到 cache line 寫成 $ line,十分有趣 :P
10/29 22:23, 1F

10/29 22:42, , 2F
$ 不是本來就是 cache 的縮寫嗎 XD
10/29 22:42, 2F

10/30 10:05, , 3F
數字都標 1. 是個 markdown 風格 :p
10/30 10:05, 3F

10/30 10:17, , 4F
XDDD
10/30 10:17, 4F

10/30 16:50, , 5F
哪可看到 $ 做cache的縮寫? (我還以為 $ 是cash的縮寫 :P)
10/30 16:50, 5F

10/30 16:55, , 6F
以前老師都寫¢ 比$還小
10/30 16:55, 6F

10/30 18:01, , 7F
推 ¢ :) 不過剛找了一下, 還真只見 L1$ L2$, 不見 L1¢之類.
10/30 18:01, 7F

11/04 17:23, , 8F
發音一樣吧,cash, cache
11/04 17:23, 8F
文章代碼(AID): #1MCYiIQ- (C_and_CPP)
文章代碼(AID): #1MCYiIQ- (C_and_CPP)