小编Had*_*ais的帖子

Perf 事件:dTLB 加载和 dTLB 存储的含义是什么?

我试图理解性能事件的含义:dTLB 加载和 dTLB 存储?

intel tlb perf amd-processor

4
推荐指数
2
解决办法
3349
查看次数

mem_load_uops_retired.l3_miss 和 offcore_response.demand_data_rd.l3_miss.local_dram 事件之间的区别

我有一个Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz( Haswell) 处理器。AFAIK计算DRAM (即)数据读取访问mem_load_uops_retired.l3_miss的数量。顾名思义,计算针对 DRAM 的数据读取次数。因此,这两个事件看起来是等价的(或者至少几乎相同)。但根据以下基准,前一个事件比后者发生的频率要低得多:demandnon-prefetchoffcore_response.demand_data_rd.l3_miss.local_dramdemand

1) 在循环中初始化 1000 个元素的全局数组C

Performance counter stats for '/home/ahmad/Simple Progs/loop':

         1,363      mem_load_uops_retired.l3_miss                                   
         1,543      offcore_response.demand_data_rd.l3_miss.local_dram                                   

   0.000749574 seconds time elapsed

   0.000778000 seconds user
   0.000000000 seconds sys
Run Code Online (Sandbox Code Playgroud)

2)在Evince中打开PDF文档:

Performance counter stats for '/opt/evince-3.28.4/bin/evince':

       936,152      mem_load_uops_retired.l3_miss                                   
     1,853,998      offcore_response.demand_data_rd.l3_miss.local_dram                                   

   4.346408203 seconds time elapsed

   1.644826000 seconds user
   0.103411000 seconds sys
Run Code Online (Sandbox Code Playgroud)

3)运行Wireshark 5秒:

Performance counter stats …
Run Code Online (Sandbox Code Playgroud)

intel performancecounter memory-access perf intel-pmu

3
推荐指数
1
解决办法
509
查看次数

_mm_sfence 内在函数和 SFENCE 指令之间有什么关系?

我正在试验非时间指令,并且已经熟悉具有普通加载/存储的围栏如何操作。

Intel 定义了一个与非时间操作相关的内在,_mm_sfence,手册将其定义为:

保证每个前面的商店在任何后续商店之前都是全局可见的。

我对这个操作有一些疑问。

  1. 这只是插入 SFENCE 指令吗?如果不是,这意味着什么?
  2. 如果这不仅仅是一个 SFENCE,那么 SFENCE 指令是否也带有非临时存储的排序保证?

x86 memory-barriers

2
推荐指数
1
解决办法
177
查看次数

引用 32 位和 64 位版本程序的最正确方法

这个问题是关于 32 位与 64 位 x86 的术语。

如果我有 2 个包含相同程序源代码的目录 - 一个用于 32 位 Windows,另一个用于 64 位 Windows,那么这些文件夹的更正确名称是什么:

  • x86-64x64 ?
  • 还是IA-32x64

我已经阅读了一些网络资源,但无法理解。仅作记录:

64-bit x86 terminology x86-64

2
推荐指数
2
解决办法
1355
查看次数

Skylake 和较新的环形巴士

在 Intel Skylake 及更新版本中,每个核心的内存子系统可以直接参与环形总线流量吗?这个框图(以及随附的信息)似乎表明了这一点。

如果是这样,子系统的哪一部分被连接?

  • L2?
  • 行填充缓冲区以方便 NT 存储?

x86 intel cpu-architecture cpu-cache

1
推荐指数
1
解决办法
1138
查看次数

在 Linux 中运行进程的性能

对于分析,我们可以在 Linux 中使用 perf。但所有示例仅显示可执行文件。

在 CentOS 中,是否可以在正在运行的进程或守护程序上运行 perf 工具?

linux perf

1
推荐指数
1
解决办法
891
查看次数

必须按顺序发生的操作的处理器的延迟界限和吞吐量界限

我的教科书(计算机系统:程序员的观点)指出,当一系列操作必须严格按顺序执行时,就会遇到延迟界限,而吞吐量界限则表征​​处理器功能单元的原始计算能力。

课本5.5、5.6题介绍了这两种可能的多项式计算循环结构

double result = a[0];
double xpwr = x;
for (int i = 1; i <= degree; i++) {
    result += a[i] * xpwr;
    xpwr = x * xpwr;
}
Run Code Online (Sandbox Code Playgroud)

double result = a[degree];
double xpwr = x;
for (int i = degree - 1; i >= 0; i--) {
    result = a[i] + x * result;
}
Run Code Online (Sandbox Code Playgroud)

假设循环在具有以下执行单元的微体系结构上执行:

  • 一个浮点加法器。它的延迟为 3 个周期,并且是完全流水线化的。
  • 两个浮点乘法器。每个的延迟是 5 个周期,并且都是完全流水线化的。
  • 四个整数 ALU,每个都有一个周期的延迟。

为这个问题给出的浮点乘法和加法的延迟界限分别是 5.0 和 3.0。根据答案键,第一个循环的总循环延迟是每个元素 5.0 个周期,第二个是每个元素 8.0 个周期。我不明白为什么第一个循环不是 8.0。

似乎 a[i] …

performance cpu-architecture micro-optimization

1
推荐指数
1
解决办法
194
查看次数

将最高有效设置位下的所有位置零的最有效方法是什么?

因此,对于以下序列:0001000111000

期望的结果将是:0001000000000

我完全清楚这可以通过使用汇编BSRL(或类似的bit-twiddling hack)找到MSB的索引然后>>将数字移位(索引 - 1),然后<<转换回(索引-1),但是我想知道是否有一个汇编指令或一系列具有更好性能的指令,而不是一个可以做到这一点的笨拙的黑客.

c++ performance x86 assembly bit-manipulation

-4
推荐指数
1
解决办法
190
查看次数