当前位置: 首页 > 知识库问答 >
问题:

L2数据和指令缓存突然减少

谷梁子昂
2023-03-14

我正在研究多核机器上paralle算法的性能。我用循环重新排序(ikj)技术做了一个关于矩阵乘法的实验。

串行执行结果如下图所示。对于所有大小的 nXn 矩阵,循环顺序 ikj 和 kij 的 L1 数据缓存命中率接近 100%(图 1 框编号 1

你认为L2统一缓存对加剧问题有什么影响吗?但是仍然是什么导致了这种减少,我应该分析算法和性能的什么特征来寻找原因。

实验机器是英特尔e4500,具有2Mb L2缓存,缓存行64,os是fedora 17 x64,带有gcc 4.7 -o没有编译器优化

削减的

                                   *Image 1*

                                    *Image 2*

                                    *Image 3*

                                   *Image 4*

                                   *Image 5*

ikj和kij算法是循环重排序技术的两种变体/

kij算法

   For (k=0;k<n;k++)
    For(i=0;i<n;i++){
        r=A[i][k];
      For (j=0;j<n;j++)
          C[i][j]+=r*B[k][j] 
    }

IKJ算法

For (i=0;i<n;i++)
     For(k=0;k<n;k++){
      r=A[i][k];
      For (j=0;j<n;j++)
           C[i][j]+=r*B[k][j] 
    }   

谢谢

共有1个答案

宇文学博
2023-03-14

我打赌这是因为在回答以下问题时讨论了超级对齐问题:

    < li >为什么我的程序在恰好8192个元素上循环时很慢? < li >为什么转置512x512的矩阵比转置513x513的矩阵慢得多? < li >矩阵乘法:矩阵大小差异小,计时差异大

我不喜欢抄袭希望可以理解

 类似资料:
  • 从本论坛上的前一个问题中,我了解到,在大多数内存系统中,一级缓存是二级缓存的子集,这意味着从二级缓存中删除的任何条目也将从一级缓存中删除。 所以现在我的问题是如何为L2缓存中的条目确定L1缓存中的相应条目。存储在L2条目中的唯一信息是标签信息。基于此标记信息,如果我重新创建addr,如果L1和L2缓存的行大小不相同,它可能会跨L1缓存中的多行。 体系结构是否真的为刷新这两条缓存线而烦恼,还是只维护

  • 数据缓存是指将一些 PHP 变量存储到缓存中,使用时再从缓存中取回。 它也是更高级缓存特性的基础,例如查询缓存 和内容缓存。 如下代码是一个典型的数据缓存使用模式。 其中 $cache 指向缓存组件: // 尝试从缓存中取回 $data $data = $cache->get($key); if ($data === false) { // $data 在缓存中没有找到,则重新计算它

  • setStorageSync 基础库1.3.9开始支持,iOS版本2.1.23,Android版本2.1.38 setStorageSync(string key, any data) ft.setStorage 的同步版本 参数 string key 本地缓存中指定的 key any data 需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。 示例代

  • jd.setStorage(OBJECT) 异步接口,将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容。 OBJECT 参数说明: 参数 类型 必填 说明 key String 是 本地缓存中的指定的 key data Object/String 是 需要存储的内容 success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失

  • 2、减法指令 、减法指令SUB(Subtract Binary Values Instruction) 指令的格式:SUB Reg/Mem, Reg/Mem/Imm 受影响的标志位:AF、CF、OF、PF、SF和ZF 指令的功能是从目的操作数中减去源操作数。 、带借位减SBB(Subtract with Borrow Instruction) 指令的格式:SBB Reg/Mem, Reg/Mem/

  • 问题内容: 在我中,我使用或下载档案的最新版本,例如: 使用或创建自己的图像层的语句。它将用作以后执行的缓存。 问题 :如何禁用该指令的缓存? 让类似 缓存失效的 东西在那里工作会很棒。例如,通过使用HTTP ETag 或查询 最后修改的 标头字段。这样就可以根据HTTP标头进行快速检查,以决定是否可以使用缓存的层。 我知道一些肮脏的技巧可以帮助例如在语句中执行下载Shell脚本。在我们的构建系统