缓存和C函数

时间:2014-03-04 15:01:39

标签: c caching nios

我们有一个函数strcpy默认优化

 static void str_cpy( char *to, const char *from)
 {
      while( *from)
      {
            *to = *from;
            to = to + 1;
            from = from + 1;
      }
      *to = '\0';
  }

和另一个,matirsadd,高度优化(3)

 void matrisadd( int res[MATRIXSIZE_ROWS][MATRIXSIZE_COLS],
                 int  a[MATRIXSIZE_ROWS][MATRIXSIZE_COLS],
                 int b[MATRIXSIZE_ROWS][MATRIXSIZE_COLS] )
 {
     int i,j;
     for(j=0; j < MATRIXSIZE; ++j)
         for(i=0; i < MATRIXSIZE; ++i)
             res[i][j] = a[i][j] + b[i][j];
 }

MATRIXSIZE(和w / e)= 16

缓存大小为128字节,块大小为8字节,关联性为1 为什么第一个函数在指令缓存中获得86%的命中率,而matrisadd在指令缓存中获得99%的命中率?

编辑: 我们知道str_cpy每个循环组成18个汇编指令,并且缓存有32个指令的空间。因此,这将只生成第一个“启动” - 直到我们已将其加载到缓存中并利用时间局部性。但matrisadd会有同样必要的启动失误,那么额外的失误来自str_cpy?

解决方案: 我们解决了它,与每个程序必须采取的循环量有关...

0 个答案:

没有答案