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

双循环携带依赖链。哪一个重要?

颜森
2023-03-14

我的CPU是IvyBridge。让我们考虑一下Agner的Fog Optimization\u assembly中的示例。12.6章和12.10a示例:

    movsd xmm2, [x] 
    movsd xmm1, [one] 
    xorps xmm0, xmm0  
    mov eax, coeff    

    L1:
        movsd xmm3, [eax] ; c[i]
        mulsd xmm3, xmm1  ; c[i]*x^i
        mulsd xmm1, xmm2  ; x^(i+1)
        addsd xmm0, xmm3  ; sum += c[i]*x^i
        add   eax, 8
        cmp eax, coeff_end
        jb L1

而且前端并不是一个瓶颈(很明显,这是因为乘法的延迟)。

我们有两个循环携带的依赖项(我跳过了添加eax,8):1<代码>mulsd xmm1,xmm25个周期2的延迟<代码>添加SD xmm0,xmm33个周期的延迟

顺便说一句,我有一个问题要决定:我应该总结(5 3=8)还是得到最大,即5周期?

我已经测试了10000000个元素的数组。根据perf,每次迭代需要6.7个周期,根据Agners的工具,每次迭代需要5.9个周期。

请解释为什么它需要6/7个周期而不是仅仅5个周期?

共有1个答案

匡旭东
2023-03-14

可能资源冲突有时会延迟循环携带的mulsd。uop调度选择最旧优先(在已准备好输入的uops中),而不是关键路径优先,因此mulsd xmm3, xmm1可能会窃取执行端口并偶尔延迟循环携带的mulsd xmm1, xmm2一个周期。

缓存未命中可能也会偶尔出现管道停顿,因为硬件预取无法跨页面边界工作。通过在超过128kiB的数据(1/2 L2缓存大小)的内部循环周围放置一个外部重复循环来测试这一点。

不过,预取正常跟上循环应该没有问题:每5个周期64b负载大约是主存储器带宽的1/5。

您还可以使用浮动而不是

您的数据是否有任何非规范化?这些都很慢(但对于苏格兰和南方能源公司,NaN不是)。

 类似资料:
  • 我创建了一个双循环链表。 我需要知道每个节点到头部的距离。 因为当我必须删除或获取具有特定密钥的节点时,如果两个节点具有相同的密钥和相同的距离,则必须删除或获取这两个节点,否则必须删除最靠近头部的节点。 我不知道如何计算距离,因为它是圆形的。。。 这个链表的插入就是这样工作的。 所有的节点都去追头。 例: 1)头部 2) 头部A(插入A) 3) 头部B-A(插入B) 4) 头部C-B-A(插入C)

  • 问题内容: 我有一个模块化的maven项目,其中两个模块“ BIZ”和“ EJB”包含如下内容: 如您所见, “ EJB”依赖于“ BIZ”, 因为它使用 MyClassX (实际上,它使用了BIZ的几种类别)。这就是 ImplFactory 使用反射实例化 InterfaceImpl 的原因。问题是 cl.newInstance() 将抛出 ClassCastException, 因为这两个模块

  • 基本上,findNode()搜索其数据等于作为参数插入的字符串的节点,但当我调用outputList()方法(该方法返回屏幕上当前节点的字符串表示)时,它将继续无限循环。 outputList方法是: 如有任何帮助,我们将不胜感激。提前道谢。

  • 双向循环链表 在“数据结构”课程中,如果创建某种数据结构的双循环链表,通常采用的办法是在这个数据结构的类型定义中有专门的成员变量 data, 并且加入两个指向该类型的指针next和prev。例如: typedef struct foo { ElemType data; struct foo *prev; struct foo *next; } foo_t; 双向循环链表的

  • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。

  • 问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!