作者harristime (瀚宇)
看板C_and_CPP
标题[问题] Matrix Multiplication 的阵列问题
时间Thu Oct 29 20:23:00 2015
下列是一段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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1446121382.A.F8C.html
1F:推 LPH66: 对齐, 在这样调整过後 A B C 的位址会是 32 的倍数 10/29 20:37
2F:→ LPH66: 不懂这个的话就别管它没关系, 它跟矩阵乘法演算法无关 10/29 20:37
3F:→ harristime: 请问它的原理是什麽? 为什麽要让address变32的倍数呢? 10/29 20:52
4F:→ harristime: 不好意思,因为我蛮想了解这用法 :) 10/29 20:55
5F:推 LiloHuang: 32 bytes alignment for Intel AVX instructions. 10/29 21:54
6F:推 yvb: 查了一下, 看起来像是下列网址: 10/30 01:08
8F:→ yvb: 其中 Week 5 的 Coursework zip档中, CW.cpp 的部分内容. 10/30 01:10