问题标签 [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 回答
776 浏览

matlab - Matlab 限制 TBB 但不限制 OpenMP

我只是要求这个试图了解我花了 24 小时试图解决的问题。

我的系统:Ubuntu 12.04.2,Matlab R2011a,它们都是 64 位,基于 Nehalem 的 Intel Xeon 处理器。

问题很简单,Matlab 允许基于 OpenMP 的程序利用启用了超线程的所有 CPU 内核,但不允许 TBB 使用相同的 CPU 内核。

运行 TBB 时,我只能启动 4 个线程,即使我将 maxNumCompThreads 更改为 8。而使用 OpenMP,我可以使用我想要的所有线程。如果没有超线程,TBB 和 OpenMP 当然会使用所有 4 个内核。

我了解超线程,并且它是虚拟的,但 matlab 的限制实际上确实会导致性能下降(额外的参考)。

我使用 2 个程序测试了这个问题,一个简单的 for 循环

以及另一个基于 tbb 示例代码的非常简单的循环。

并用 matlab mexFunction 将它们都包裹起来。

有人对此有解释吗?允许matlab节流TBB但不允许OpenMP节流的线程创建方法或结构是否存在固有差异?

参考代码:

开放式MP:

待定:

0 投票
1 回答
3954 浏览

cpu - VirtualBox 如何计算可用的虚拟 CPU 数量?

我试图在 VB IRC 频道中找到这个问题的答案,我查看了 stackexchange、stackoverflow、超级用户和其他地方。答案很接近,但不是我想知道的。

这只是一个好奇的问题,而不是必要的问题。我只是想知道事情是如何运作的。它与任何错误、增强请求或安全问题无关。如果您觉得这个论坛不是获得答案的地方,请让我找到合适的地点。谢谢。(尽管任何人都很难想象 VBox 自己的论坛可能是错误的地方,但我没有看到对我的特定问题的答案或发布到适当类别的地方。)无论发生什么,请不要关闭我的问题至少没有指向更好的资源(我讨厌这种情况发生!)。再次感谢。

现在,问题是:virtualbox 的主机驱动程序如何计算要提供的虚拟 CPU 的总数?

(请注意,我不会回复那些没有真正阅读过问题的人的回答,或者至少首先要求更多澄清。我认为这是一个非常直截了当的问题。)

让我把问题分解一下,以便尽可能准确和简洁地说明我真正要问的问题。我很想知道 VirtualBox HOST 软件(可能是什么部分)如何确定在配置界面上出现多少 VIRTUAL CPU,用户可以在其中选择他们想应用于特定 VM 的 VCPU 数量。

我不是在问什么:总的来说,我不是在问虚拟化硬件等的奇迹;我了解多核和多线程、VTx 等。我不是在问我应该为特定的 VM 或应用程序使用多少。在我的问题中,我不是在寻求帮助来配置任何特定的虚拟机。我不是要任何人问我为什么我需要知道——我已经告诉过你了;我只是好奇。如果您对我的具体问题不感兴趣,那很好。同样,这只是一个简单直接的问题:VBox 是如何得出这个数字的?

我已经知道的:确实,至少一般来说,答案是物理 CPU 的 2 倍;好的,如果是这样,为什么是 2x 而不是 3x 或其他乘数?(我知道小数不适用于奇数的内核或线程;我只是尽可能地通用。)例如,在我的 Phenom II X6 上,VirtualBox 为我提供了多达 12 个 VCPU。如果答案是线程,那不可能,因为我的特定 Thuban 没有线程(有些 Thuban 有,有些没有)。不过,我的 Thuban 拥有的是超传输,而不是超线程。同样,我的旧 Phenom II X2 将允许在 Virtualbox 中使用 4 个 VCPU。

我已经阅读了上述网站上的大量回复,告诫用户不要在每个 VM 上使用多个 VCPU,因为这会增加开销(一方面,您必须运行 IOAPIC,这会导致性能下降)。我也读过一些帖子,其中的问题听起来像我的,但他们最终并没有给出答案。

答案是某种 sigma sum 还是对数公式?它是否足够复杂,超过了这个论坛的格式化功能?很难想象为什么很难得到这个问题的答案,我认为这个问题会被多次询问和回答。我真的很想知道为什么它通常看起来是 2x;为什么这是“神奇”数字。如果我阅读源代码(假设这是可用的),评论会解释原因吗?

我真的很感激和钦佩阅读和回答这个问题的灵魂,而不是其他没有被问到的问题。我也希望您不要将我重定向到 IRC 的黑暗和敌对频道;IRC 上有一些非常反社会的实体,他们的言论让我想起了犯罪心理上的一些未订阅者。请注意,我说的是“一些”——那里也有乐于助人的人。没有对抗的意思;我只是讨厌再去IRC了。如果您知道 IRC 上有一个特别有用的昵称,我也将不胜感激。

顺便说一句,我一直在谷歌上寻找这个问题和其他问题的答案,并阅读 SO、SE 和 SU 板,我看到有些人的回答是完全不相关的。这就是为什么我的语气听起来很刺耳的原因。这是我的第一篇文章,我希望回复会比我在 IRC 上的一些经验更积极。

0 投票
1 回答
799 浏览

c++ - Mac 上的超线程 - 速度不快

我已经使用 openMP 在 C++ 中实现了一个凸壳算法。

代码可以在这里找到:http ://codepad.org/VVQdSdfM

处理器运行代码所需的时间:

我在我的 CPU 活动监视器中找到了四个插槽,并且我知道这个版本的英特尔处理器支持超线程。

如果是这种情况,我不应该在使用 4 个线程时获得 4 个加速吗?

请提供任何可以帮助我使用英特尔处理器中的超线程功能的指示。

谢谢,维杰

0 投票
1 回答
102 浏览

opencv - 正在用 tbb 编译 opencv,与带有 2 个线程的处理器相关

我将 OpenCv 与以下处理器一起使用: Intel(R) Atom(TM) CPU N455 @ 1.66GHz Intel 表示此处理器有 1 个内核但有 2 个线程。那么使用带有 TBB 选项的 OpenCv 并期望更快的执行是否相关?

谢谢

0 投票
2 回答
1160 浏览

cluster-computing - 具有超线程的 MPI 主机文件

我正在我大学的计算机实验室中跨节点运行一些小型 MPI 作业。没有安装排队系统,所以每次我想运行作业时我都必须自己生成 MPI 主机文件,然后像这样运行它们:

我使用 Open MPI,所以现在我的主机文件看起来像这样:

我的问题是:每个节点都有一个 Intel® Core™ i7-3770 处理器,它是四核的,但也是超线程的。什么是涉及超线程的 Open MPI 主机文件的最佳实践?我应该为每个节点列出四个还是八个插槽?

谢谢。

0 投票
1 回答
405 浏览

c - 超线程英特尔处理器和 C

如果我在设计代码时不使用多线程范例,超线程会自动将负载分配到逻辑核心上,还是必须专门编写以利用其他核心,就像物理核心一样?

0 投票
1 回答
3045 浏览

c - 超线程代码示例

是否有一些示例代码可以体现英特尔的超线程性能?它是否可以从用户空间访问,或者该 CPU 是否为程序员透明地完成所有工作?这是针对 C、Linux 的。

0 投票
3 回答
2297 浏览

c++ - 超线程 - 我可以通过哪个测试检查它是启用还是禁用?

是否有任何简单的性能测试来检测是否启用了 HT?例如,当最大 CPU 数量受 linux 内核(NR_CPUS)限制且无法访问 BIOS 时,我需要它。

那么你能建议任何代码来检测是否启用了 HT 吗?

在这里这里看了一眼,但这不是答案。谢谢。

0 投票
1 回答
1108 浏览

multithreading - 有没有办法强制两个线程在同一个核心上执行?

我有一个处理大量数据的应用程序。
当工作集超过 L2(L3) 缓存时,性能会急剧下降。

我想使用预取数据来解决部分问题。

我想利用在超线程 CPU 上运行的多线程代码共享一个核心和缓存这一事实。

第一个线程 (A) 是工作线程。
第二个线程 (B) 预取数据。

如果我可以强制两个线程在同一个核心上执行,我可以让线程 (B) 提前运行并获取数据。
这是它在伪代码中的样子。

两个线程同步执行,工作线程全速运行,获取线程等待信号。

有没有办法强制两个线程在超线程 CPU 的同一个内核中运行?

我正在使用德尔福 XE2。

PS 我知道如何使用 CPUID 指令检测 CPU 是否支持超线程。

0 投票
3 回答
445 浏览

c# - 为什么超线程对我的算法有好处?

由于超线程,我有一台带有 4 个逻辑处理器的双核机器。我正在 C# 中执行 SHA1 前映像蛮力测试。在每个线程中,我基本上都有一个 for 循环并计算 SHA1 哈希,然后将哈希与我要查找的内容进行比较。我确保所有线程都以完全分离的方式执行。它们之间没有共享内存。(除了一个变量:长计数,我在每个线程中使用以下方法递增:

System.Threading.Interlocked.Increment(ref count);

我得到大约 100 万个 sha1/s 的 2 个线程和 130 万个 sha1/s 的 4 个线程。我不明白为什么在这种情况下我会从 HT 获得 30% 的奖励。两个核心都应该忙着做他们的事情,所以将线程数增加到 2 个以上应该不会给我带来任何好处。谁能解释为什么?