有人能帮我理解一下“假性依赖”是什么意思吗?
我的教授刚刚在这张幻灯片中解释了为什么我们不能在命令1之前运行命令3,但为什么后来他称之为“假”?
它是“假”的,因为后面的指令实际上不需要前面指令的数据。唯一的冲突是找到一个放置结果的地方。就像幻灯片上说的,“不是真正的数据依赖”;只有战争风险才是真正的依赖。
如果CPU发明了一个临时位置来放置结果,直到架构寄存器可用,它可以独立执行后面的指令。必须等待这个寄存器准备好是可以避免的,因此它不是真正的依赖,它是错误的。
寄存器重命名通常避免了WAR和WAW危险,但CPU将指令视为具有来自寄存器的输入的特殊情况除外,即使结果不依赖于其中的任何位。
尽管您的幻灯片不是x86 asm,但您标记了[intel],因此您可能更喜欢x86示例:
像movss
这样的只写指令写入相同的寄存器,打破了对先前值的依赖,因为执行OoO exec的x86 CPU也执行寄存器重命名。在矢量点积中保持多个 vfmadd
指令的一种方法是使用多个寄存器来保存总和。lzcnt eax,edx
对于 EAX 应该是只写的,但是英特尔·哈斯韦尔和布罗德韦尔有一个错误的输出依赖性,像 bsr eax 一
样调度它,在 EDX 为零的情况下读取 EAX。popcnt
、假(输出)依赖桑迪布里奇家族,直到 Ice Lake。有趣的是,它运行在与 lzcnt
/ bsr
/ tzcnt
/ bsf
相同的执行单元上。mov di,123
被安排为添加edi,123
,不像mov
到32或64位寄存器,它们都覆盖整个寄存器以避免错误的依赖关系,而不会进行混乱的部分寄存器重命名。我编写了一个TimerHelper类,它可以接收来自其他类的调用并尝试执行它们。如果发生异常,它将等待一段时间并重试。因此,其他类可以导出必须完成的任务,但不是目前必须完成的任务。 14:56:19,125错误[org.jboss.MSC.service.fail](MSC服务线程1-7)MSC000001:未能启动服务jboss.deployment.unit.“usermanagement.w
在学习gradle时,我似乎是Java的构建工具。但我不明白依赖到底是什么。Gradle中的依赖项部分到底是什么意思?它有什么用途?
我正在尝试运行一些Android测试,然而,编译器抱怨多个dex文件存在。 因此,我正在尝试筛选重复的依赖项: 然而,我得到以下输出: 我不明白箭头(->)的意思。他们是什么意思?
问题内容: 已经发布了几个问题,其中包括有关依赖项注入的特定问题,例如何时使用它以及支持它的框架。然而, 什么是依赖项注入?何时/为什么/不应该使用它? 问题答案: 依赖注入 将依赖传递给其他 对象 或 框架 (依赖注入器)。 依赖注入使测试更加容易。注入可以通过 构造函数 完成。 其构造函数如下: 问题 :如果涉及复杂的任务,例如磁盘访问或网络访问,则 很难 对其进行单元测试。程序员必须进行模拟
问题内容: 我有一个依赖关系如下: 当我部署一切正常时,这将拉下另一个引发ClassDefNotFound的依赖项。 我添加了两个依赖项,如下所示: 并且仍然面临着同样的问题,即:MVN带来下来不 我该如何解决? 编辑: 添加; 问题答案: 您可能有一个传递依赖项,另一个依赖项取决于您不需要的版本。 要获得所有直接和传递依赖关系的概述,请尝试: mvn依赖项:树 如果您发现同一依赖项的不同版本之间
问题内容: 我有一个二进制文件,其中ldd显示了意外的依赖项和libicuuc(来自“ icu”)。 由于在该系统上libxml动态依赖于libicuuc,因此ldd最终会找到它是有意义的,但是是否期望libicuuc也出现在A的ldd输出中?是否有一些命令仅检索链接为依赖项依赖关系的库? 问题答案: 显示启动应用程序或加载共享库时需要加载的所有库。 仅显示二进制文件的直接依赖项。 是否有一些命令