问题标签 [hyperthreading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
8587 浏览

hyperthreading - 在支持超线程的四核 CPU 上运行的单 CPU 程序

我是统计模式识别方面的研究员,我经常运行运行了很多天的模拟。我正在运行带有 Linux 3.2.0-24-generic 的 Ubuntu 12.04,据我所知,它支持多核和超线程。使用带有 HTT 的 Intel Core i7 Sandy Bridge Quadcore,我经常同时运行 4 个模拟(需要很长时间的程序)。在我问我的问题之前,这里是我已经(认为我)知道的事情。

  • 由于超线程,我的操作系统(Ubuntu 12.04)检测到 8 个 CPU。
  • 我的操作系统中的调度程序足够聪明,永远不会调度两个程序在属于同一物理内核的两个逻辑(虚拟)内核上运行,因为操作系统支持 SMP(同时多线程)。
  • 我已阅读有关超线程的 Wikipedia 页面。
  • 我已阅读 Sandy Bridge 上的 HowStuffWorks 页面。

好的,我的问题如下。当我在我的计算机上同时运行 4 个模拟(程序)时,它们每个都运行在一个单独的物理内核上。然而,由于超线程,每个物理核心被分成两个逻辑核心。因此,每个物理内核是否仅使用其全部容量的一半来运行我的每个模拟?

非常感谢您提前。如果我的问题的任何部分不清楚,请告诉我。

0 投票
1 回答
2292 浏览

c# - 禁用超线程与更改 ProcessorAffinity?

我注意到如果我在 BIOS 中禁用超线程,我的一些多线程计算运行得更快。

我还了解到,我可以通过修改当前进程的处理器亲和性来以编程方式禁用(逻辑)CPU:s,例如在 C# 中是这样的:

至少从性能的角度来看,通过更改处理器亲和性来禁用每秒(逻辑)CPU 是否与完全禁用超线程具有相同的效果?

0 投票
1 回答
608 浏览

macos - 从 EFI 禁用 Mac-pro 2008 中的超线程?

有没有办法在固件级别(EFI)禁用 HT?我在 mac-pro 2008 工作站中安装了 server-linux 发行版和 macosx。

在 google 中搜索,我想出了 EFI shell 命令“cpuconfig threads off”,但这似乎只适用于 EFI 附带的 HP 服务器。

mac-pro的解决方案是什么?

作为紧急解决方案,我可以一个一个地手动禁用 ubuntu 中的逻辑 CPU,但我不确定这是否是获得高效性能和最大 cpu 频率的好方法。

0 投票
2 回答
469 浏览

winapi - 内核和超线程

我正在用 C 编写一个极其优化且 CPU 密集型的多线程代码,它在或多或少有限的时间空间内执行任务。在此期间,除了加载初始值和存储最终结果之外,它不会冒险离开其 L1 缓存。所以本质上这是一个并行化的代码,它为每个添加的核心线性扩展。这就是在非 HT 内核上发生的情况。

在我的带有 HT 的 2 核 i5 上(BIOS 不允许禁用它 - 无论如何这是一个不切实际的解决方案),从一个核心变为两个核心时,我得到了令人讨厌的令人沮丧的改进。我的假设是第一个线程单独运行在一个核心上,第二个线程与第一个共享核心。

Windows API 中有一些函数可以检索有关可用内核和 HT 的信息。但是我如何利用这些信息来确保每个核心的一个超线程上只有一个线程?

0 投票
7 回答
6402 浏览

java - 如果 CPU 是超线程,是否可以检查 Java?

我想知道我可以运行的最佳线程数。通常,这等于Runtime.getRuntime().availableProcessors()

但是,在支持超线程的 CPU 上,返回的数字是其两倍。现在,对于某些任务,超线程是好的,但对于其他任务,它什么也没做。就我而言,我怀疑它什么也没做,所以我想知道我是否必须将返回的数字一分为Runtime.getRuntime().availableProcessors()二。

为此,我必须推断 CPU 是否是超线程。因此我的问题是——我怎样才能在 Java 中做到这一点?

谢谢。

编辑

好的,我已经对我的代码进行了基准测试。这是我的环境:

  • Lenovo ThinkPad W510(即具有 4 核和超线程的 i7 CPU),16G RAM
  • Windows 7的
  • 84 个压缩的 CSV 文件,压缩大小从 105M 到 16M
  • 所有文件都在主线程中一一读取 - 没有对 HD 的多线程访问。
  • 每个 CSV 文件行都包含一些数据,这些数据会被解析并通过快速的无上下文测试确定该行是否相关。
  • 每个相关行都包含两个双精度(表示经度和纬度,出于好奇),它们被强制转换为一个Long,然后存储在一个共享的哈希集中。

因此,工作线程不会从 HD 中读取任何内容,但它们会忙于解压缩和解析内容(使用opencsv库)。

下面是代码,没有无聊的细节:

请在结果下方找到(我稍微更改了输出以省略重复部分):

您可以自由得出自己的结论,但我的观点是,在我的具体案例中,超线程确实提高了性能。此外,拥有 6 个工作线程似乎是这项任务和我的机器的正确选择。

0 投票
1 回答
95 浏览

hyperthreading - 超线程配置

假设我有一台机器,它有 2 个 Intel Xeon x5550 四核处理器(共 8 核)。超线程已启用。

我想在 4 个内核(4 个线程)上运行一个应用程序,每个内核有 2 个物理内核和 2 个线程(超线程),而不是使用实际的 4 个物理内核。

这有可能做到这一点吗?

0 投票
5 回答
13285 浏览

openmpi - 每个核心分配两个 MPI 进程

如何为每个核心分配 2 个 MPI 进程?

例如,如果我这样做,mpirun -np 4 ./application那么它应该使用 2 个物理内核来运行 4 个 MPI 进程(每个内核 2 个进程)。我正在使用 Open MPI 1.6。我做了mpirun -np 4 -nc 2 ./application但无法运行它。

它抱怨mpirun was unable to launch the specified application as it could not find an executable:

0 投票
3 回答
2081 浏览

performance - 关于超线程中 L1 缓存的自适应模式

我是一名最近在研究超线程的学生。我对这个特性有点困惑——L1 数据缓存上下文模式。

架构优化手册中,描述了 L1 缓存可以在两种模式下运行:

  • 一级缓存可以根据上下文 ID 位以两种模式运行:

    1. 共享模式:L1 数据缓存由两个逻辑处理器完全共享。

    2. 自适应模式:在自适应模式下,使用页目录的内存访问在共享 L1 数据缓存的逻辑处理器之间进行相同的映射。

但是,我很好奇缓存如何根据描述在自适应模式下进行分区。

0 投票
1 回答
332 浏览

hyperthreading - 英特尔 IPP 库要求

所以我正在尝试编译库附带的英特尔 IPP 示例应用程序——字符串匹配——我似乎无法利用 IPP 指令。当我禁用机器上的一个核心时,计算时间保持不变。我想知道我的机器是否满足 IPP 的所有要求,和/或为什么会出现这种情况。

这里是环境:

  • Windows 7的
  • IPP 7.0
  • Intel Core i3(2 个内核,每个内核 2 个线程)
  • 我使用 msconfig 选项禁用内核(启动选项卡 > 高级选项...)

我假设我的机器上支持/启用了超线程,因为正如您在图片中看到的那样在此处输入图像描述 ,逻辑处理器的数量大于处理器的数量。

0 投票
4 回答
7178 浏览

python - python如何判断是否启用了超线程

我有 Intel i7-2600K 四核,在 Ubuntu 12.04 上启用了超线程。我知道我可以用 找出我在 Python 中有多少个内核import multiprocessing; multiprocessing.cpu_count(),但这给了我 8 个内核,因为我在 4 个物理内核上启用了超线程。我很想知道我有多少物理内核。有没有办法在 Python 中做到这一点?或者,有没有办法在 Python 中找出是否启用了超线程?预先感谢您的帮助!