Re: [問題] Matrix Multiplication 的陣列問題
其實原理很簡單
只要從這幾點考量
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
10/29 22:23, 1F
→
10/29 22:42, , 2F
10/29 22:42, 2F
推
10/30 10:05, , 3F
10/30 10:05, 3F
推
10/30 10:17, , 4F
10/30 10:17, 4F
推
10/30 16:50, , 5F
10/30 16:50, 5F
→
10/30 16:55, , 6F
10/30 16:55, 6F
推
10/30 18:01, , 7F
10/30 18:01, 7F
推
11/04 17:23, , 8F
11/04 17:23, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):