我将分析和优化一些 C 代码,因此我首先必须检查我要优化的函数是内存绑定的还是 CPU 绑定的。一般来说,我知道如何做到这一点,但我对计算浮点运算和分析使用的数据大小有一些疑问。看下面我要分析的for循环。数组的值是双精度的(这意味着每个 8 字节):
for(int j=0 ;j<N;j++){
for(int i=1 ;i<Nt;i++){
matrix[j*Nt+i] = matrix[j*Nt+i-1] * mu + matrix[j*Nt+i]*sigma;
}
}
1)你数了多少浮点运算?我考虑过 3*(Nt-1)*N... 但我是否也必须计算数组中的操作(矩阵 [j*Nt+i],对于这个数组来说还有 2 个 FLOP)?
2)传输了多少数据?2* ((Nt-1)*N) 8Byte 或 3 ((Nt-1)*N)*8Byte。我的意思是,必须加载矩阵的每个条目。计算后,新值将保存到数组的该索引(现在是 1load 和 1 store)。但是这个值是用于下一次计算的。因此是否需要另一个加载操作,或者这个值 (matrix[j*Nt+i-1]) 在没有加载操作的情况下是否已经可用?
多谢!!!