程序一:
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
for(k=0; k<p; k++)
{
c[i][j] = a[i][k] * b[k][j];
}
}
}
程序二:
for(i=0; i<m; i++)
{
for(k=0; k<p; k++)
{
for(j=0; j<n; j++)
{
c[i][j] = a[i][k] * b[k][j];
}
}
}
程序一在循环的时候给c[i][j]赋值时,a[i][k]是连续的,但是b[k][j]跳跃性很大,这样对于cache的命中率降低了很多,故会稍微比程序二慢一些,当数据量大的时候,这种细微的差别就会体现出来。