看板 C_and_CPP 關於我們 聯絡資訊
其實原理很簡單 只要從這幾點考量 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
LiloHuang: 頭一次看到 cache line 寫成 $ line,十分有趣 :P 10/29 22:23
johnjohnlin: $ 不是本來就是 cache 的縮寫嗎 XD 10/29 22:42
LPH66: 數字都標 1. 是個 markdown 風格 :p 10/30 10:05
BlazarArc: XDDD 10/30 10:17
yvb: 哪可看到 $ 做cache的縮寫? (我還以為 $ 是cash的縮寫 :P) 10/30 16:50
MOONRAKER: 以前老師都寫¢ 比$還小 10/30 16:55
yvb: 推 ¢ :) 不過剛找了一下, 還真只見 L1$ L2$, 不見 L1¢之類. 10/30 18:01
suhorng: 發音一樣吧,cash, cache 11/04 17:23