- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一台 12 核 MacPro 来进行一些蒙特卡罗计算。其 Intel Xeon 处理器启用了超线程 (HT),因此实际上应该有 24 个进程并行运行才能充分利用它们。然而,我们的计算在 12x100% 上运行比在 24x50% 上运行效率更高,因此我们尝试通过系统首选项中的“处理器” Pane 关闭超线程,以获得更高的性能。还可以通过以下方式关闭 HT
hwprefs -v cpu_ht=false
然后我们进行了一些测试,结果如下:
看来超线程只是降低了我们的计算性能,而且没有办法避免。我们用于计算的程序是用 Fortran 编写的,并使用 gfortran
进行编译。有没有办法提高这个硬件的效率?
更新:我们的蒙特卡罗计算 (MCC) 通常是分步骤完成的,以避免数据丢失以及由于其他原因(并不总是可以避免此类步骤)。在我们的例子中,每个步骤都包含许多持续时间可变的模拟。由于每个步骤都分为多个并行任务,因此它们的持续时间也不同。本质上,所有较快的任务都必须等到最慢的任务完成。这一事实迫使我们采取更大的步骤,由于平均而导致的时间偏差更小,因此处理器不会浪费时间等待。这就是我们使用 12*2.66 GHz 而不是 24*1.33 GHz 的动机。如果可以关闭 HT,那么通过从 24 个带 HT 的任务切换到 12 个不带 HT 的任务,我们可以获得大约 +10% 的性能。然而,测试表明我们损失了 20%。所以我的结论是计算效率低了30%。
对于测试,我使用了相当大的步骤,但通常步骤较短,因此效率变得更高。
还有一个原因 - 我们的一些计算需要 3-5 GB 内存,因此您可能会看到,拥有 12 个快速任务对我们来说是多么经济。我们正在努力实现共享内存,但这将是一个长期项目。因此我们需要找出如何让现有的硬件/软件尽可能快。
最佳答案
这更像是一个扩展评论,而不是一个答案:
我并不觉得你的观察结果非常令人惊讶。超线程是一种穷人的并行化方法,它允许您在一个 CPU 上拥有 2 个待处理指令的管道。但它不提供额外的浮点或整数运算单元或更多寄存器;当一个管道无法为 ALU(或现在所谓的任何名称)提供数据时,另一个管道会在一两个时钟周期内激活。这与没有超线程的 CPU 上的情况形成鲜明对比,在这种情况下,当指令管道停止时,必须在 CPU 恢复速度之前刷新并重新填充来自另一个进程的指令。
Wikipedia article on hyperthreading很好地解释了这一切。
如果您正在运行的负载中管道停顿完全同步,并且占程序组合总执行时间的主要部分,那么您可以通过从非超线程处理器转到超线程处理器来使程序速度加倍。
如果(这是一个很大的假设)您可以编写一个永远不会在指令管道中停滞的程序,那么超线程将不会提供任何好处(在执行加速方面)。您测量到的不是由于 HT 导致的加速(嗯,这是由于 HT 导致的加速,但您实际上并不想要这样),而是线程无法保持管道移动。
你要做的实际上是降低 HT 带来的加速!或者,您必须通过保持管道填充来提高 12 个进程(每个核心一个)的执行率。就我个人而言,我会在优化 12 核上的程序执行时关闭超线程。
玩得开心。
关于macos - 关闭 6 核 Intel Xeon 中的超线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854882/
我是Intel pin工具的新手,最近开始研究pin工具。在教程中,描述了pin工具的模式: Sometimes, however, it can be useful to look at diffe
我是Intel pin工具的新手,最近开始研究pin工具。在教程中,描述了pin工具的模式: Sometimes, however, it can be useful to look at diffe
我得到了这份工作:1。产生一个正弦信号。2。使用 FFT 构建其频谱。首先,我为 visual studio 2010 安装了 Intel Parallel Studio XE 2011。在 vs 2
看起来 Intel 提供了许多 OpenCL 实现。 ArchWiki描述 OpenCL 实现。它说 beignet 和 intel-opencl 已弃用。那么,intel-compute-runti
我正在尝试通过阅读 Intel Intrinsics Guide 来开始使用 AVX512 内在函数但到目前为止我发现它没有定义命名数据类型或用于解释的伪代码语法。没有这样的定义,所谓的指南对我起码没
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
在 Android SDK 管理器中,我可以看到 3 种类型的 Intel Atom 图像。有人可以解释“Intel Atom Image”、“Google APIs Intel Atom Image
我写了这个 pintool: #include "pin.H" #include #include VOID Instruction(INS ins, VOID *v) { cou
我正在尝试了解 _mm256_permute2f128_ps() 的作用,但无法完全理解 intel's code-example . DEFINE SELECT4(src1, src2, contr
我正在开发一个性能关键应用程序,该应用程序必须移植到仅支持 MMX、SSE、SSE2 和 SSE3 的英特尔凌动处理器中。我以前的应用程序支持 SSSE3 和 AVX,现在我想将其降级为 Intel
我有最新版本的 Intel Pin 3.0 版本 76887。 我有一个支持 MPX 的玩具示例: #include int g[10]; int main(int argc, char **arg
我想研究和比较elf、SPARC和PA-RISC的可执行文件结构。 为了进行研究,我想在 Intel 机器 (Core2Duo) 上安装 OpenSolaris。 但我有一个基本的疑问,它会起作用吗?
我尝试使用 g++ 用 intel mkl 11.1 进行编译: g++ -m32 test.c -lmkl_intel -lmkl_intel_thread -lmkl_core -liomp5 -
我正在按照以下说明进行操作: https://software.intel.com/en-us/articles/building-boost-with-intel-c-compiler-150 Co
我正在尝试在我的 C 程序中使用内联汇编程序 __asm,使用 Intel 语法而不是 AT&T 语法。我正在使用 gcc -S -masm=intel test.c 进行编译但它给出了错误。下面是我
我是 OpenCL 的新手,目前对其性能有一些疑问。 我有 Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz + ubuntu + Beignet(Intel 开源 op
我在/ex 文件夹中有一个 main.f90。 f77 子程序文件在/ex/src 中。子程序文件再次使用 BLAS 和 LAPACK 库。对于 BLAS 和 LAPACK,我必须使用英特尔数学核心函
我的团队最近从 2015 年英特尔编译器(并行工作室)升级到 2018 年版本,我们遇到了一个链接器问题,让每个人都焦头烂额。 我有以下类(为简洁起见进行了适度编辑),用于处理子进程的包装以及与它们对
在最后几天,我观察到我无法解释的新工作站的行为。对这个问题做一些研究,INTEL Haswell architecture 中可能存在一个可能的错误。以及在当前的 Skylake Generation
我的 HAXM 安装存在问题。事情是这样的。每次尝试为我的计算机安装 HAXM 时,我都会收到此错误: 问题是,我的计算机支持虚拟化技术(见下图)。知道如何解决这个问题吗? 最佳答案 只需执行以下步骤
我是一名优秀的程序员,十分优秀!