- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这三个片段的执行时间:
pageboundary: dq (pageboundary + 8)
...
mov rdx, [rel pageboundary]
.loop:
mov rdx, [rdx - 8]
sub ecx, 1
jnz .loop
pageboundary: dq (pageboundary - 8)
...
mov rdx, [rel pageboundary]
.loop:
mov rdx, [rdx + 8]
sub ecx, 1
jnz .loop
pageboundary: dq (pageboundary - 4096)
...
mov rdx, [rel pageboundary]
.loop:
mov rdx, [rdx + 4096]
sub ecx, 1
jnz .loop
rdx
和
rdx + 8
不属于同一页面,加载仍然对齐。偏移量大时,它又回到了 5 个周期。
.loop:
mov rdx, [rdx + 8]
or rdx, 0
sub ecx, 1
jnz .loop
.loop:
lfence
; or rdx, 0
mov rdx, [rdx + 8]
; or rdx, 0
; uncomment one of the ORs
lfence
sub ecx, 1
jnz .loop
or
放在
mov
之前使循环比没有任何
or
更快,将
or
放在 0x23141 之后使其更慢 a131414。
最佳答案
优化规则:在链表/树等指针连接数据结构中,将 next
或 left
/right
指针放在对象的前 16 个字节中。 malloc
通常返回 16 字节对齐的块( alignof(maxalign_t)
),因此这将确保链接指针与对象的开头位于同一页面中。
确保重要的结构成员与对象的开头位于同一页面的任何其他方法也将起作用。
Sandybridge 系列通常具有 5 个周期的 L1d 负载使用延迟,但有一种特殊情况,用于使用 base+disp 寻址模式进行小正位移的指针追逐。
Sandybridge 系列对于 [reg + 0..2047]
寻址模式有 4 个周期的负载使用延迟,当基本 reg 是 mov
加载的结果,而不是 ALU 指令时。或者,如果 reg+disp
与 reg
位于不同的页面中,则惩罚。
根据 Haswell 和 Skylake(可能还有原始 SnB 但我们不知道)的这些测试结果,似乎以下所有条件都必须为真:
[reg]
或 [reg+disp8/disp32]
。 ( Or an indexed load with an xor-zeroed index register! 通常没有实际用处,但可能会提供一些有关问题/重命名阶段转换负载 uops 的见解。) (Sandybridge)
Table 2-21. Effect of Addressing Modes on Load Latency
-----------------------------------------------------------------------
Data Type | Base + Offset > 2048 | Base + Offset < 2048
| Base + Index [+ Offset] |
----------------------+--------------------------+----------------------
Integer | 5 | 4
MMX, SSE, 128-bit AVX | 6 | 5
X87 | 7 | 6
256-bit AVX | 7 | 7
(remember, 256-bit loads on SnB take 2 cycles in the load port, unlike on HSW/SKL)
这张 table 周围的文字也没有提到 Haswell/Skylake 上存在的限制,也可能存在于 SnB 上(我不知道)。
and rdx, rdx
dep 链。
%define off 16
lea rdi, [buf+4096 - 16]
mov [rdi], rdi
mov [rdi+off], rdi
mov ebp, 100000000
.loop:
and rdi, rdi
mov rdi, [rdi] ; base comes from AND
mov rdi, [rdi+off] ; base comes from a load
dec ebp
jnz .loop
... sys_exit_group(0)
section .bss
align 4096
buf: resb 4096*2
在 SKL i7-6700k 上使用 Linux
mov rdx, [rdx-8]
计时。
perf
,推测是正确的,我们得到总延迟 = 10 个周期 = 1 + 5 + 4。(每次迭代 10 个周期)。off = 8
, off = 16
加载很慢,我们得到 16 个周期/iter = 1 + 5 + 10。(SKL 的惩罚似乎比 HSW 更高)[rdi+off]
加载),无论 off=8 还是 off=16,它始终为 10c,因此我们已经证明,如果
[rdi+off]
的输入来自 ALU 指令,则不会尝试推测性快速路径.
mov rdi, [rdi+off]
和
and
,我们会得到预期的每次迭代 8c:两者都使用快速路径。 (@harold 确认 HSW 在这里也有 8 个)。
off=8
和 and
,我们每次迭代得到 15c: 5+10 。
off=16
尝试快速路径并失败,占用 10c。然后
mov rdi, [rdi+16]
不会尝试快速路径,因为它的输入失败。 (
@harold 的 HSW 在此处取 13: 4 + 9 。因此,即使最后一条快速路径失败,HSW 也确实尝试了快速路径,并且快速路径失败惩罚在 10 HSW 与 10 HSW 上确实只有 9。在 SKL)
mov rdi, [rdi]
总是可以安全地使用快速路径。
[base]
,平均延迟为 7.5 个周期。基于对其他混合的测试,我认为它在 5c 和 10c 之间交替:在没有尝试快速路径的 5c 负载之后,下一个确实尝试并失败了,取了 10c。这使得下一个负载使用安全的 5c 路径。
mov rdi, [rdi+16]
,NASM 将其组装为
[nosplit off + rdi*1]
。请注意,这需要一个 disp32,因此对代码大小不利。
48 8b 3c 3d 10 00 00 00 mov rdi,QWORD PTR [rdi*1+0x10]
或
mov
),则索引寻址模式本身没有任何问题。但是,使用额外的归零寄存器并不是很好。
关于performance - 当 base+offset 与 base 位于不同的页面时,是否有惩罚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52351397/
我正在使用 javascript 并有以下类: const Product = require('../models').Product class ProductService { cons
我正在开发一个简单的应用程序,宠物用户可以在其中创建关于他们宠物的板并在板上显示图片。 我正在尝试创建一个功能,用户可以点击他们的图板,将他们重定向到他们的图板,该图板将显示他们所有的宠物图片。 当我
我有这样的事情:循环遍历 ids,并对每个 ids 向服务器(同一域)发出 ajax 请求 (async:true) 并将接收到的数据附加到 DOM 元素。这不是一项艰巨的任务,它确实有效。示例代码:
我正在尝试使用 Pillow 在我的网络应用程序中添加用户可上传的图像。我创建了一个 Django Upload 模型并将其注册到 Admin 中。当我使用管理控制台添加照片后,我收到以下错误。最初该
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
说到 UINavigationBar 时我有点困惑。我以编程方式设置它,它的作用是将我的 viewController 向下推(因此在启动应用程序后看不到 Storyboard中看到的 View 底部
我有以下查询,它可以满足我的要求,并显示从出生日期转换而来的人们的年龄。但我现在想通过说大于或小于这些年龄来缩小结果范围,但我不知道该怎么做。 SELECT u.`id` as `user_id`
我有一个 ListView (不是 recyclerView),其中每一行都有一个按钮、几个 TextView 和一个 EditText。单击特定按钮(“editTremp”)后,我希望 EditTe
我的 cellAtIndexPath 中有一个查询。正如常见的那样,此查询从单元格行索引处的数组中获取对象。我想知道每次加载 tableView 时是否只有一个查询,还是将其算作每个 indexPat
我目前正在探索 http://www.ecovivo.be/rubriek/food 上使用的模板中的错误. 问题:访问该链接时,您会注意到右侧有一个带有内容的大型 float 图像。现在一切正常。但
我在 ViewController 之间通过引用传递特定模型的数组。 如果我更改数组中特定元素的任何值,它会在所有 ViewController 中很好地反射(reflect),但是当我从该数组中删除
svg 包含更多元素,其中之一是下拉选择器。我遇到的问题是选择器只能在其顶部边缘被点击,而不能在选择器的其他任何地方被点击。 选择器称为 yp-date-range-selector。在下一张图片中,
我的元素使用 20 行 20 列的 css 网格布局(每个单元格占屏幕的 5%)。其中一个页面有一个按钮。最初该页面包含在网格第 5-8 列和网格第 6-9 行中,按钮本身没有问题,但我需要将其居中放
我想使用 CSS Trick 使图像居中.但是如果图像大小是随机的(不固定的)怎么办。令人惊讶的是,我不想保持图像响应,我想在不改变其宽度或高度(实际像素)的情况下将图像置于中心。 下面是我的代码:
我正在尝试在网址之间进行路由。产品是一个类: from django.db import models from django.urls import reverse # Create your mo
我正在通过查看 Django 教程来制作网站。我收到一个错误: NoReverseMatch at /polls/ Reverse for 'index' with no arguments not
我一直在试用 Django 教程 Django Tutorial Page 3并遇到了这个错误 "TemplateDoesNotExist at /polls/ " . 我假设问题出在我的代码指向模板
我有一个应用程序,其中大部分图像资源都存储在单独的资源包中(这样做是有正当理由的)。这个资源包与主应用程序包一起添加到项目中,当我在 Interface Builder 中设计我的 NIB 时,所有这
我使用 Xcode 6.3.2 开发了一个 iPad 应用程序。我将我的应用程序提交到 App Store 进行审核,但由于崩溃而被拒绝。以下是来自 iTunes 的崩溃报告。 Incident Id
我正在使用以下内容来显示水平滚动条: CSS: div { width: 300px; overflow-x: scroll; } div::-webkit-scrollbar {
我是一名优秀的程序员,十分优秀!