标签: hyperthreading

GetSystemInfo(在Windows上)是否总是返回逻辑处理器的数量?

阅读本文,特别是阅读Microsoft文档,它看起来应该返回PHYSICAL处理器的数量,并且您应该使用GetLogicalProcessorInformation来确定您拥有多少LOGICAL处理器.

这是我在SYSTEM_INFO结构上找到的文档:http://msdn.microsoft.com/en-us/library/ms724958 (v = VS.85).aspx这里是关于GetLogicalProcessorInformation的文档:(通过垃圾邮件添加的空格)过滤器) http:// msdn.microsoft.com/ zh-cn/library/ms683194.aspx

尽管如此,在我发现的关于这个主题的大多数讨论中,开发人员都说GetSystemInfo(以及SYSTEM_INFO结构)报告了LOGICAL处理器的数量.

当我再次搜索时,我发现MS确实在此发布了一些信息(以及一个热修复),这里(通过垃圾邮件过滤器添加了空格): http:// support.microsoft.com/ kb/936235

读取它,听起来像在Xp上,预服务包3,GetSystemInfo报告SYSTEM_INFO结构中的LOGICAL处理器的数量.它还告诉我,在Windows Vista和Windows 7上,GetSystemInfo应该报告PHYSICAL处理器的数量(与Windows XP pre-service Pack 3不同).

有谁知道它实际上做了什么?GetSystemInfo是否真的以不同的方式报告物理处理器的数量(在同一台计算机上),具体取决于它运行的操作系统?

c++ windows winapi hyperthreading

5
推荐指数
1
解决办法
2561
查看次数

超线程内核是否共享MMU和TLB?

据我所知,英特尔x86_64的超线程内核中没有共享MMU和TLB。

但是,如果两个不共享地址空间的线程被调度到同一物理核心,它们如何运行?

我认为,在那种情况下,线程没有任何机会达到TLB,因为线程具有自己的地址空间。

如果那样的话,我认为这种表现将被降级。

x86 cpu-architecture hyperthreading tlb mmu

5
推荐指数
1
解决办法
342
查看次数

Visual Studio 2010,超线程处理器的最大并发C++编译

我正在尝试优化大型VC++项目的编译时间.我的处理器是Core i7 950(4核,8线程,因为它支持Intel超线程技术).

在Microsoft Visual Studio 2010中,如果转到"工具">"选项">"项目和解决方案">"VC++项目设置">"最大并发C++编译"

您可以选择用于并行C++编译的最大CPU内核.我在那里选择0(以便使用我的所有核心),这与使用4或8时产生完全相同的结果.

现在,如果我在编译项目时打开任务管理器,我可以看到4个并行编译线程正在运行(在进程下他们有描述:Microsoft C/C++编译器驱动程序),并且总CPU使用率略低于50%的所有时间.

所以我的问题是:

是否有可能在四核,超线程处理器中拥有8个并行编译线程?如果这是不可能的,那么在编译时是否有可能以某种方式使用接近100%的处理器功率?

这将为我节省大量时间.

非常感谢你提前,

尼古拉斯

c++ compiler-construction parallel-processing visual-studio-2010 hyperthreading

4
推荐指数
1
解决办法
3907
查看次数

使用超线程运行模拟使运行时间加倍

我使用python/numpy/cython编写的模拟.由于我需要平均多次模拟运行,因此我使用多处理模块批量运行所有单独的模拟运行.

在办公室我有一个带HT的i7-920工作站.在家里我没有i5-560.我想我可以在办公室的每一批中运行两倍的模拟实例,并将我的运行时间缩短一半.令人惊讶的是,与我在家庭工作站上的时间相比,每个实例的运行时间增加了一倍.它在家中并行运行3个模拟实例需要8分钟,而在办公室运行6个实例大约需要15分钟.使用'cat/proc/cpuinfo'我验证了'siblings'= 8和'cpu cores'= 4,因此启用了HT.

我不知道任何"总运行时间保护"法律(虽然从科学的角度来看它可能非常有趣:)),并且在这里跳跃的人可能会对这个难题有所了解.

python linux multiprocessing hyperthreading

4
推荐指数
1
解决办法
3238
查看次数

我应该禁用HyperThreading来运行并行仿真吗?

我的电脑有一个四核i7处理器.我正在研究科学模拟的并行化.超线程如何影响并行性能?我知道我不应该使用超过4个工作流程来获得下降表现.但是我应该禁用超线程吗?它对并行性能有影响吗?

parallel-processing optimization performance hyperthreading

4
推荐指数
1
解决办法
4494
查看次数

超线程代码示例

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

c architecture multithreading hyperthreading

4
推荐指数
1
解决办法
2911
查看次数

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

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

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

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

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

如果我可以强制两个线程在同一个核心上执行,我可以让线程(B)运行并获取数据.
以下是伪代码的外观.

procedure TWorkerThread.Execute;
begin
  Node:= WalkTheDataTree.GetNode;  
  Dowork(Node.MyData);
  SyncWithThreadB;
end; 

procedure TFetchThread.Execute;
begin
  WaitForThreadA; 
  Node:= WalkTheDataTree_5_nodes_Ahead_of_A.GetNode;  //Prefetch data.
end;
Run Code Online (Sandbox Code Playgroud)

两个线程都以锁步方式执行,工作线程以全速运行,而获取线程等待信号.

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

我正在使用Delphi XE2.

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

delphi multithreading hyperthreading delphi-xe2

4
推荐指数
1
解决办法
982
查看次数

什么是“逻辑CPU核心”

我正在阅读一些操作系统材料。我读到这句话让我有点困惑:“多核是指具有多个逻辑CPU核心的计算机或处理器,并且可以同时执行多个指令。”

什么是“逻辑CPU核心”,是处理器吗?它是否对应于物理的东西,或者是操作系统看到逻辑CPU核心,但实际上物理处理器比逻辑CPU核心少?

cpu operating-system multicore cpu-architecture hyperthreading

4
推荐指数
1
解决办法
1997
查看次数

golang计算虚拟核心,而不是物理核心?

我有一些golang代码我在我的Macbook(具有两个物理内核的Intel Core i5处理器)上进行基准测试.

golang runtime.NumCPU()收益4,因为它算"虚拟核心"

在这种情况下,我对虚拟内核了解不多,但我的基准测试似乎表明,当我使用配置代码时,多处理速度只有2倍

runtime.GOMAXPROCS(runtime.NumCPU())
Run Code Online (Sandbox Code Playgroud)

如果我使用2而不是4核,我会得到相同的性能.我会发布代码,但我认为这与我的问题基本无关,它们是:

1)这是正常的吗?

2)为什么,如果是的话,多个虚拟核心能否像我的macbook这样的机器受益?

更新:

如果它很重要,在我的代码中,有与您设置runtime.GOMAXPROCS() 的任何内容相同数量的goroutine,任务完全并行,没有相互依赖性或共享状态.它作为本机编译二进制文件运行.

virtualization multiprocessing go hyperthreading

4
推荐指数
1
解决办法
998
查看次数

如何获得正确数量的逻辑处理器

在Delphi中,我们需要知道用于并行化的CPU数量。到现在为止,我们已经在GetNativeSystemInfo()带有超线程的服务器上使用了运行良好的功能。

但是现在,我们有一台服务器(Intel Xeon Gold 6230)具有40个物理处理器和80个具有超线程的逻辑处理器,并且GetNativeSystemInfo()仅显示40个CPU。

我们制作了一个使用3个调用的小型测试程序:

  1. GetNativeSystemInfo()

  2. GetLogicalProcessorInformation()(“ 如何有效地检测逻辑和物理处理器数量的代码?”

  3. 并查看注册表中的CPU数量:

    计算机\ HKEY_LOCAL_MACHINE \硬件\ DESCRIPTION \系统\中央处理器

对于我们所有的服务器,这3个调用给出了相同数量的CPU:

图片

但是对于英特尔至强,只有注册表为我们提供了80个CPU:

图片

有谁知道为什么它不能在英特尔服务器上运行,还是知道一种确保获得最大CPU数量的方法?

delphi cpu hyperthreading system-information

4
推荐指数
1
解决办法
232
查看次数