标签: intel

在6核Intel Xeon中关闭超线程

我们得到了一个12核的MacPro来进行蒙特卡罗计算.它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行以充分利用它们.但是,我们的计算效率比12x100%高出24x50%更高效,因此我们尝试Processor在系统首选项中通过窗格关闭超线程以获得更高的性能.人们也可以关闭HT

hwprefs -v cpu_ht=false
Run Code Online (Sandbox Code Playgroud)

然后我们进行了一些测试,这是我们得到的:

  1. 12个并行任务同时运行w /或没有HT让我们失望.
  2. 如果HT关闭,24个并行任务松散20%(不是我们想象的-50%)
  3. 当HT打开时,从24个任务切换到12个任务会使效率降低20%(同样令人惊讶)
  4. 当HT关闭时,从24切换到12不会改变任何东西.

似乎超线程只是降低了我们计算的性能,并且没有办法避免它.我们用于计算的程序是用Fortran编写的,并使用gfortran.有没有办法让这个硬件更高效?


更新:我们的蒙特卡罗计算(MCC)通常是分步进行的,以避免数据丢失和由于其他原因(并不总是可以避免这些步骤).在我们的例子中,每一步都包含许多具有可变持续时间的模拟.由于每个步骤在多个并行任务之间分割,因此它们也具有可变持续时间.基本上,所有更快的任务都必须等到最慢完成.这一事实迫使我们采取更大的步骤,由于平均而导致时间偏差减少,因此处理器不会浪费时间等待.这是我们拥有12*2.66 GHz而不是24*1.33 GHz的动机.如果可以关闭HT,那么通过从24个任务w/HT切换到12个没有HT的任务,我们可以获得大约+ 10%的性能.但是,测试表明我们松了20%.

对于测试,我使用了相当大的步骤,但通常步骤较短,因此效率变得更高.

还有一个原因 - 我们的一些计算需要3-5 GB的内存,因此您可能会看到我们有12个快速任务的经济性.我们正在努力实现共享内存,但它将成为一个冗长的术语项目.因此,我们需要了解如何尽可能快地制作现有的硬件/软件.

macos fortran intel gfortran hyperthreading

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

为什么英特尔不以更兼容或通用的方式设计其SIMD ISA?

英特尔拥有多个SIMD ISA,如Xeon Phi上的SSE,AVX,AVX2,AVX-512和IMCI.这些ISA在不同的处理器上受支持.例如,AVX-512 BW,AVX-512 DQ和AVX-512 VL仅支持Skylake,但不支持Xeon Phi.Skylake和Xeon Phi均支持AVX-512F,AVX-512 CDI,AVX-512 ERI和AVX-512 PFI.

为什么英特尔不设计可以在其所有高级处理器上运行的更通用的SIMD ISA?

此外,英特尔在开发ISA时删除了一些内在函数并添加了新的内在函数.很多内在函数有很多种.例如,一些工作在打包的8位上,而一些工作在打包的64位上.有些口味没有得到广泛支持.例如,Xeon Phi无法处理打包的8位值.然而,Skylake将拥有此功能.

为什么英特尔以这种不一致的方式改变其SIMD内在函数?

如果SIMD ISA彼此更兼容,则现有的AVX代码可以轻松移植到AVX-512.

intel simd avx avx2 avx512

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

AMD 处理器的单步客户操作系统指令:AMD 的 Intel Monitor Trap Flag 等效项

我正在编写一个调试器,它应该跟踪虚拟机中来宾操作系统的执行情况。Intel VMX Monitor Trap Flag 字段使我们能够单步执行客户操作系统指令。

但我正在使用 AMD 处理器,并且在文档中没有找到任何等效的内容。有人知道 Intel VTX Monitor Trap Flag 是否有等效的 AMD SVM 吗?

debugging virtualization x86 intel amd-processor

6
推荐指数
0
解决办法
373
查看次数

哪些性能事件可以使用 PEBS?

我想了解哪些事件可以在我的 CPU(Sandy Bridge)上有精确的修改器。

英特尔软件开发人员手册(表 18-32.英特尔微架构代号 Sandy Bridge 的 PEBS 性能事件)仅包含以下事件:INST_RETIREDUOPS_RETIREDBR_INST_RETIREDBR_MISP_RETIREDMEM_UOPS_RETIREDMEM_LOAD_UOPS_RETIREDMEM_LOAD_UOPS_LLC_HIT_RETIRED。SandyBridge_core_V15.json列出了 PEBS > 0 的相同事件

然而,有一些使用 的例子perf,这增加:pcycles事件的发生。perf record -e cycles:p而且我可以在我的机器上成功运行。

perf record -e cycles:p -vv -- sleep 1打印precise_ip 1。那么这是否意味着该CPU_CLK_UNHALTED事件实际上使用了 PEBS?

是否可以获得支持的完整事件列表:p

linux performance intel performancecounter perf

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

当跳转在 32 字节上没有完全对齐时,使用 MITE(传统管道)代替 DSB(uop 缓存)

这个问题曾经是这个(现已更新)问题的一部分,但它似乎应该是另一个问题,因为它无助于获得另一个问题的答案。


我的出发点是一个循环进行 3 个独立的添加:

for (unsigned long i = 0; i < 2000000000; i++) {
    asm volatile("" : "+r" (a), "+r" (b), "+r" (c), "+r" (d)); // prevents C compiler from optimizing out adds
    a = a + d;
    b = b + d;
    c = c + d;
}
Run Code Online (Sandbox Code Playgroud)

当这个循环没有展开时,它在 1 个周期内执行(这是预期的:它包含 4 条指令:3 个加法和宏融合增量/跳转;所有这些都可以在端口 0 上在一个周期内执行, 1、5 和 6)。展开此循环时,性能令人惊讶,并且往往比未展开的版本慢 25%,这可能是由于 uops 调度,如上一个问题的评论中所建议的。

在这个问题中,我不是在问性能,而是在问为什么在某些情况下,uop 来自 MITE(传统管道),而在其他情况下,来自 DSB(uop 缓存)。(请注意,我使用的是禁用 LSD(循环流检测器)的 Skylake)

实验上,当跳转在 32 字节上没有完全对齐时,uop 是从 MITE …

performance x86 assembly intel

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

How does one enable Intel Processor Tracing (IPT) in a virtualized environment?

I am attempting to run Alex Ionescu's WinIPT interface in a virtual machine, and having no success. (This is a Windows 10 Pro host running a Windows 10 VM and both are the 18363 update)

I have successfully built and run Intel's driver as well as Alex's toolchain on the host, and processed the trace with ptxed. I have also run Intel's cpuid utility, and verified that the INTEL_PROCESSOR_TRACE feature is active on the host. However, when I run the …

virtualization trace kernel intel intel-pmu

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

发布后添加到 x86 CPU 的指令

有没有在x86 CPU 发布后添加指令的情况?也就是说,一条指令不存在/开箱即用的 CPU,但在微码更新后可以在同一个 CPU 样本上工作?

x86 assembly x86-64 intel amd-processor

6
推荐指数
0
解决办法
101
查看次数

优化第 7 代英特尔酷睿视频 RAM 中递增的 ASCII 十进制计数器

我正在尝试针对特定的 Kaby Lake CPU (i5-7300HQ) 优化以下子例程,理想情况下,与原始形式相比,代码速度至少快 10 倍。该代码在 16 位实模式下作为软盘式引导加载程序运行。它在屏幕上显示一个十位数的十进制计数器,从 0 - 9999999999 计数然后停止。

我查看了 Agner 的微体系结构汇编优化指南、 指令性能表和英特尔的优化参考手册

到目前为止,我能够做的唯一明智的优化是将loop指令交换为dec + jnz在此处进行解释。

另一种可能的优化可能是交换lodsbfor mov + dec,但我发现的关于它的信息一直存在冲突,有些人说它有一点帮助,而另一些人则认为它实际上可能会损害现代 CPU 的性能。

我还尝试切换到 32 位模式并将整个计数器保留在一个未使用的寄存器对中以消除任何内存访问,但在读入一点后我意识到这十位将立即被缓存,并且 L1 缓存之间的延迟差异和寄存器只有大约三倍,所以绝对不值得以这种格式使用计数器的额外开销。

(编者注:add reg延迟为 1 个周期,add [mem]延迟约为 6 个周期,包括 5 个周期的存储转发延迟。如果[mem]像视频 RAM 那样不可缓存,则更糟。)

org 7c00h

pos equ 2*(2*80-2)  ;address on screen

;init
cli
mov ax,3
int 10h
mov …
Run Code Online (Sandbox Code Playgroud)

optimization x86 assembly intel bootloader

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

Xcode 可以在 M1 Mac 上构建本机 Intel 二进制文件吗

是否可以在 M1 Mac 上使用 Xcode 构建本机 Intel 二进制文件?我想开始使用 M1 架构进行测试,但仍需要继续构建原生英特尔应用程序,而无需进行任何更改。

macos xcode intel cross-compiling apple-m1

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

为什么 x86 不实现直接的核心到核心消息传递汇编/CPU 指令?

经过认真的发展,CPU 获得了许多核心,在多个小芯片、numa 系统等上获得了分布式核心块,但数据仍然不仅必须通过 L1 缓存(如果在同一核心 SMT 上),而且还必须通过一些原子/互斥同步未经硬件加速的原始过程。

我想知道为什么英特尔或 IBM 没有想出这样的东西:

movcor 1 MX 5 <---- sends 5 to Messaging register of core 1
pipe 1 1 1 <---- pushes data=1 to pipe=1 of core=1 and core1 needs to pop it
bcast 1 <--- broadcasts 1 to all cores' pipe-0 
Run Code Online (Sandbox Code Playgroud)

使其比其他方法快得多?GPU 支持块级快速同步点,例如barrier()__syncthreads()。GPU 还支持本地阵列的并行原子更新加速。

当 CPU 增加 256 个核心时,此功能是否不会为在核心到核心带宽(和/或延迟)上遇到瓶颈的各种算法提供严重的扩展?

x86 assembly intel message-passing cpu-architecture

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