- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MASKMOVDQU 1 在 x86 存储指令中很特殊,因为原则上,它允许您将单个字节存储在缓存行中,而无需先将整个缓存行一直加载到内核,以便写入的字节可以与未覆盖的字节合并现有字节。
它似乎使用与 NT 存储相同的机制来工作:在不首先执行 RFO 的情况下将缓存行向下推。根据英特尔软件开发手册(重点是我的):
The MASKMOVQ instruction can be used to improve performance for algorithms that need to merge data on a byteby-byte basis. It should not cause a read for ownership; doing so generates unnecessary bandwidth since data is to be written directly using the byte-mask without allocating old data prior to the store.
最佳答案
MASKMOVDQU
确实很慢,而且可能永远不是一个好主意,例如 Skylake 每 6 个周期吞吐量 1 个或 Zen2/Zen3 每 18c 一个。
我怀疑掩码 NT 向量存储不再适用于多核 CPU,因此,如果完整的 64 字节行中有任何未修改的字节,那么即使是 128 位版本也可能在现代 x86 上进行掩码写入。
常规(不是 NT)掩码矢量存储在 AVX512 中大受欢迎。似乎可以有效地支持对 L1d 缓存的掩码提交,并且对于使用 AVX1 的 dword/qword 掩码 vmaskmovps/pd
和 Intel CPU 上的整数等价物。 (虽然不是 AMD:AMD 只有有效的屏蔽 AVX1/2 加载,而不是存储。https://uops.info/table.html 显示 Zen3 上的 VPMASKMOVD M256, YMM, YMM
是 42 uops,12c 吞吐量,与 Zen2 大致相同。对比 Skylake 上的 3 uops,1c 延迟。掩码负载在 AMD 上很好,1 uop 0.5c 吞吐量,所以实际上比 AVX2 版本的 Skylake 更好。可能 Skylake 在内部做了一个比较掩码并使用为 AVX-512 设计的硬件。)
AVX512F 使具有 dword/qword 粒度的掩码成为一等公民,对加载和存储都提供非常有效的支持。 AVX512BW 添加了 8 位和 16 位元素大小,包括屏蔽加载/存储,如 vmovdqu8
英特尔硬件也有效支持;单 uop 甚至商店。
SDRAM 总线协议(protocol)确实支持字节屏蔽写入(每字节 1 个屏蔽线作为缓存线突发传输的一部分)。 This Intel doc (关于 FPGA 或其他内容)包括对 DM
的讨论(数据掩码)信号,确认 DDR4 仍然具有它们,其功能与维基百科上描述的 SDRAM 的 DQM 线相同 https://en.wikipedia.org/wiki/Synchronous_dynamic_random-access_memory#SDR_SDRAM . (DDR1 将其更改为仅写掩码,而不是读掩码。)
因此,硬件功能就在那里,例如,大概现代 x86 CPU 使用它来对不可缓存的内存进行单字节写入。
(更新:字节屏蔽 may 只有 optional in DDR4 ,与一些早期的 SDRAM/DDR 版本不同。在这种情况下,存储可以以屏蔽形式到达内存 Controller ,但内存 Controller 必须读取/修改/使用单独的突发读取和突发写入命令将包含的 8 字节块写入实际的 DIMM。对于仅影响 64 字节 DDR 突发大小的一部分的存储,可以将突发缩短,从而节省一些数据带宽,但仍然存在命令开销并在内存 Controller 中占用更长的缓冲区空间。)
如果我们写一个完整的行 无 RFO 商店很棒:我们只是使该行的其他副本无效并存储到内存中。
John "Dr. Bandwidth" McCalpin says正常的 NT 存储在填充完整的 64 字节行后刷新 甚至会使脏的行无效,而不会导致脏数据的写回。
所以被屏蔽的 NT 存储需要使用不同的机制,因为任何被屏蔽的字节都需要从另一个内核的脏行中获取它们的值,而不是从 DRAM 中的任何内容中获取。
如果部分行 NT 存储的机制效率不高 ,添加创建它的新指令是不明智的。我不知道它是否比对生产线的一部分进行普通商店效率更高或更低,或者这是否取决于情况和 uarch。
它不必完全是一个 RFO,但这意味着当这样的存储到达内存 Controller 时,它必须获得监听过滤器以确保行同步,或者可能与来自的旧内容合并在刷新到 DRAM 之前缓存。
或者 CPU 内核可以在发送全行记下之前执行 RFO 和合并
内存层次结构。
在回收尚未写入所有 64 字节的 LFB 时,CPU 确实需要某种机制来刷新部分行 NT 存储,我们知道这效率不高。 (但我忘记了细节。)但也许这就是 maskmovdqu
总是在现代 CPU 上执行,或者如果您保留任何未修改的字节。
一个实验可能会发现。
所以 TL:DR maskmovqdu
可能只在单核 CPU 中有效实现。它起源于带有 MMX 的 Katmai Pentium III maskmovq mm0, mm1
; SMP 系统存在,但在设计该指令时可能不是该指令的主要考虑因素。 SMP 系统没有共享的最后一级缓存,但它们在每个套接字上仍然有私有(private)的回写 L1d 缓存。
关于caching - 为什么 MASKMOVDQU 没有扩展到 256 位和 512 位存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931225/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!