问题标签 [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 投票
1 回答
4666 浏览

gcc - 由于 OpenMP 的超线程导致性能不佳:如何将线程绑定到内核

我正在开发大型密集矩阵乘法代码。当我分析代码时,它有时会得到我四核系统峰值失败率的 75% 左右,而其他时候会得到大约 36%。执行代码之间的效率不会改变。它要么从 75% 开始并以该效率继续,要么从 36% 开始并以该效率继续。

我已将问题追溯到超线程以及我将线程数设置为四个而不是默认的八个这一事实。当我在 BIOS 中禁用超线程时,我的效率始终保持在 75% 左右(或者至少我从未看到大幅下降到 36%)。

在我调用任何并行代码之前omp_set_num_threads(4)。在我运行我的代码之前我也尝试export OMP_NUM_THREADS=4过,但它似乎是等价的。

我不想在 BIOS 中禁用超线程。我想我需要将四个线程绑定到四个核心。我已经测试了一些不同的情况,GOMP_CPU_AFFINITY但到目前为止我仍然遇到效率有时为 36% 的问题。 超线程和内核的映射是什么? 例如,线程 0 和线程 1 是否对应同一个核心,线程 2 和线程 3 是否对应另一个核心?

如何在没有线程迁移的情况下将线程绑定到每个内核,这样我就不必在 BIOS 中禁用超线程? 也许我需要考虑使用sched_setaffinity

我当前系统的一些细节:Linux 内核 3.13,GCC 4.8,Intel Xeon E5-1620(四个物理内核,八个超线程)。

编辑:到目前为止,这似乎运作良好

或者

编辑:这似乎也很好用

编辑: 这些选项也很好用(gemm 是我的可执行文件的名称)

0 投票
2 回答
7362 浏览

java - 在 Java 中启用英特尔超线程

我有一个在四核 Intel i7 上运行的多线程程序。当我执行时Runtime.getRuntime.availableProcessors(),我得到 8,并且我知道在这个 CPU 上可以使用超线程。

但是,当我创建线程时,4 个线程的 CPU 级别为 100%(即非零),这意味着 4 个线程未使用。有没有办法在 Java 中启用超线程?

0 投票
1 回答
337 浏览

windows-phone-8-emulator - Windows 8.1 pro(64 位)中的 Windows Phone 模拟器

我正在尝试在我的电脑 windows 8.1 pro(64 位)上启用超线程。它是酷睿 i3 h61m-ds2 技嘉主板。我已经从那里安装了 coreinfo.exe 我已经看到我的电脑具有超线程设施。我遵循此处描述的所有步骤:http: //msdn.microsoft.com/library/windows/apps/jj863509 (v=vs.105).aspx#coreinfo 。但是当我打开超级选项后重新启动我的电脑然后当我打开电脑时它显示它无法更新我的所有更改。之后当我尝试运行模拟器时它再次要求我打开超级v 特征。我再次这样做,它再次要求我重新启动......再次这样做......同样的事情再次出现。

PS我尝试在电脑启动时按del键进入bios设置。在那里我找不到大部分的bios功能。有没有其他方法可以进入高级 BIOS 设置,或者可能是任何其他 BIOS 设置。

0 投票
1 回答
496 浏览

mpi - 如何在 openmpi 1.6.4+ rankfiles 中指定物理 CPU id?

最新的 ( v1.8.3) OpenMPI 文档指定 rankfiles 现在必须使用报告的逻辑cpu IDhwloc而不是物理ID,请参阅此处文档Rankfiles部分的最后一句话:mpirun

从 Open MPI v1.7 开始,所有插槽/核心插槽位置都被指定为逻辑索引(Open MPI v1.6 系列使用物理索引)。您可以使用诸如 HWLOC 的“lstopo”之类的工具来查找套接字和内核的逻辑索引。

我注意到这个网站上的一些问题(特别是这个问题和这个问题的答案)表明可以通过在 id 前面加上p. 例如:

请求物理 cpu id0为 rank 0,物理 cpu id8为 rank1等...

我尝试在 OpenMPI 文档中搜索此语法无济于事。我还尝试让某人实际尝试在 OpenMPI 中以这种方式构建排名文件1.6.4,他报告说这也不起作用。

此语法适用于哪个版本的 OpenMPI?它在任何地方都有记录吗?什么是正式的语法?

0 投票
2 回答
226 浏览

sse - 多个进程可以隐藏 SSE 指令的延迟吗?

我需要高性能合并并遇到:Jatin Chhugani 等人在多核 SIMD CPU 架构上进行排序的有效实现

他们的目标是从 1 个 CPU 中获得最大的性能,他们的解决方案之一是在 SIMD 级别上使用双调排序网络。为了隐藏 min/max 和 shuffle 操作的延迟,他们同时执行 4 个排序网络(尽管我认为它们的意思是交错的。)。这使得性能提高了 3.25 倍。

我的问题有点放松,我有多对需要处理(独立读取)的数组,所以我可以简单地运行多个进程,从而轻松获得更高的吞吐量。

虽然如果我超额订阅可用内核的进程数量,这是否也隐藏了延迟?但在更高的水平上诱导?或者我们是在超线程领域涉足,我永远不会超过 2 个进程在 CPU 内核中共享相同功能单元的限制?

我当然可以尝试,但更改现有代码相当复杂,我想先听听理论。

0 投票
1 回答
245 浏览

node.js - 为什么 Heroku 上的 node.js 应用程序在 2 个线程和 4 个线程下的性能相同?

我一直在研究一系列自动负载测试脚本,我注意到当平均下来时,在 Heroku dyno(在本例中为 Hapi. js 服务器立即返回回复),尽管测功机报告自己有四个可用的 CPU。1 和 2 进程之间的差异是巨大的,吞吐量增加了近 100%。

我的猜测是 Intel CPU/超线程报告的内核数量是实际可用内核的两倍,并且 Node 并没有真正受益于调度的好处,但关于 Heroku dynos 规格的可用信息似乎很少。这是准确的,还是有其他原因在没有 I/O 的服务器上的 2 个线程上性能上限?

0 投票
2 回答
344 浏览

multithreading - x86 超线程对缓存未命中的说明

如果我对 x86 cpu 的理解正确,那么超线程是有益的,尤其是当我们进行 IO 调用时,这样当阻塞线程空闲时,另一个线程可以在同一个 CPU 上廉价地工作。我的问题是缓存未命中是否也会发生同样的事情。那么在等待数百个周期从主内存中获取数据时,其他线程可以在同一个物理 CPU 上执行一些代码吗?

0 投票
1 回答
9578 浏览

android - 如何在 Windows 8 中禁用 Hyper-V 并安装 HAXM

我正在尝试为 android studio 安装 HAXM,但它显示错误:

在此处输入图像描述

现在我的系统启用了 VT-x:

在此处输入图像描述

在此之后我尝试禁用 HYPER-V 但是当我尝试通过 cmd 它显示错误:

在此处输入图像描述

在 Windows 功能中,我没有 HYPER-V 选项:

在此处输入图像描述

我已经卸载了我的 AVAST 防病毒软件,我也尝试通过 powershell 禁用 HYPER-V,但它不工作..

我正在使用带有英特尔 i5 的 windows 8.1 64 位操作系统

请帮助
提前谢谢!

0 投票
1 回答
170 浏览

c - 超线程对 gettimeofday 和其他时间测量的影响

当我在 C 语言中使用 BLAS 矩阵运算对超线程 CPU 进行基准测试时,我观察到使用超线程时函数的运行时间几乎翻了一番。由于乱序执行或其他优化,我期望的是某种速度的提高。

我使用 gettimeofday 来估计运行时间。为了评估观察结果,我想知道您是否对 gettimeofday 在超线程环境(Debian Linux 32 位)中的稳定性或我的期望(他们可能是错误的)有想法?

更新:我忘了提到我正在运行基准测试应用程序两次,每次都将亲和性设置为一个超线程核心。例如 gemm 并行运行两次。

0 投票
2 回答
725 浏览

java - 如何设置使用 Tomcat 的 servlet 可以处理的最大同时请求数

我想知道使用 servlet 构建的 Web 应用程序可以同时处理多少个请求(使用 Tomcat 7)。我已经配置了 server.xml 文件的 maxThreads、acceptCount、minSpareThreads 属性。

我的问题是:我们是否也必须考虑底层操作系统?

例如:

那么最多可以同时处理 4 个请求并等待 1 个请求?假设每个请求都需要一些时间才能完成。我们是否还必须考虑超线程?