Linux中的内核函数是否会返回运行内核模块的物理内核和逻辑内核(在超线程的情况下)的数量?
HT/SMT背后的主要思想是,当一个线程停止时,同一内核上的另一个线程可以共同选择剩余的内核空闲时间并透明地运行它.
2013年,英特尔放弃了SMT,转而支持Silvermont处理器内核的无序执行,因为他们发现这可以提供更好的性能.
ARM不再支持SMT(出于能源原因).AMD从不支持它.在野外,我们仍然有各种支持它的处理器.
从我的角度来看,如果构建数据和算法是为了不惜一切代价避免缓存未命中和后续处理停滞,那么HT在多核系统中肯定是一个冗余因素吗?虽然我很欣赏上下文切换所涉及的开销很低,因为两个HyperThreads的离散硬件存在于同一物理内核中,但我看不出这比没有上下文切换更好.
我建议,任何需要针对超线程点缺陷的软件设计.这里有什么我想念的吗?
我在文献中已经看到一些较新的CPU,例如Intel Xeon"Nehalem-EX",它有8个内核和16个线程.他们在这里谈什么?我在引用中看到了这一点,所以SPARCS也是如此,这肯定不是代码产生的那种逻辑线程吗?这个超线程是否重新命名?
有谁知道从MATLAB查询物理内核数量的方法?我特别想获得物理核心数而不是逻辑核心数(当启用超线程时可能会有所不同).
我需要这个方法是跨平台的(Windows和Linux,不关心Mac),但我很乐意使用两个单独的方法和一个switch基于输出的语句computer.
到目前为止,我已经尝试过:
java.lang.Runtime.getRuntime().availableProcessorsSystem.Environment.ProcessorCount!wmic cpu get NumberOfCores和!wmic cpu get NumberOfLogicalProcessors.1是跨平台的,但返回逻辑处理器而不是物理处理器的数量.
2仅适用于Windows,并且还返回逻辑处理器而不是物理处理器.
3给出了物理和逻辑处理器,但也只是Windows,虽然我可以从DOS命令窗口成功使用它,但出于某种原因,它似乎从MATLAB运行时会持续一段时间.
我注意到如果我在BIOS中禁用超线程,我的多线程计算会运行得更快.
我还了解到,我可以通过修改当前进程的处理器关联来以编程方式禁用(逻辑)CPU:例如,在C#中这样:
// using System.Diagnostics;
var current = Process.GetCurrentProcess();
var affinity = current.ProcessorAffinity.ToInt32();
current.ProcessorAffinity = new IntPtr(affinity & 0x5555);
Run Code Online (Sandbox Code Playgroud)
至少从性能的角度来看,通过改变处理器亲和性来禁用每秒(逻辑)CPU与完全禁用超线程具有相同的效果吗?
我正在开发一款Android游戏,Galaxy S和双核Galaxy S2等单核手机之间的性能差异可与日夜相媲美.因此,我没有为单核和双核/四核制作不同的版本,而是考虑使用设备的处理器数来关闭某些图形功能.
但获得处理器数量的可靠性如何?有些单核手机有像英特尔超线程这样的线程,它将一个核心显示为两个吗?或者一些双核手机比Galaxy S2慢很多?
这是困难的一个。
我需要使用命令从我的服务器输出确切数量的内核。
我的测试:
X:在具有 4 个处理器(插槽)和 2 个内核的 Windows 服务器上,每个内核都没有 HT。Y:在具有 2 个处理器(插槽)和 6 个内核的 Windows Server 上,每个内核都带有 HT。GetSystemInfo只为我提供安装的处理器数量:X 为 4,Y 为 2。
| | X: 8 cores | Y: 12 cores |
| | 4x2 (no HT) | 2x6 (HT) |
|----------------|-------------|-------------|
| Desired output | 8 | 12 |
| GetSystemInfo | 4 | 2 |
Run Code Online (Sandbox Code Playgroud)
%NUMBER_OF_PROCESSORS%是一个很好的,但它考虑到了HT。它告诉我 X 为 8,Y 为 24(因为它有 HT,我需要它显示 12)。
| | X: 8 cores | …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以解释这两个不同的原因?它与intel硬件架构(HT)有关吗?
我在OpenMPHyperThreaded CPU上使用代码.
如果其他条件相同,那么非HyperThreaded CPU的性能会如何变化?
我注意到100%的处理器利用率,无论我运行多少线程,但改变线程数确实提高了性能.怎么会这样?
非INTEL多线程CPU的故事是否相同?
c++ parallel-processing multithreading openmp hyperthreading
在运行 Linux 的共享内存系统上,假设它有 4 个 Intel Xeon-E5 CPU,每个 CPU 有 10 个内核。安装了 PBS Pro。例如qsub -l select=1:ncpu=30,如果用户想要在 30 个内核上运行,他们通常会运行软件程序。或者会setenv OMP_NUM_THREADS 30为其他软件做。
我的问题主要与基于 MPI 的商业软件包有关。暂时忽略 PBS 和 qsub,运行这些程序所做的只是在启动后从下拉菜单中选择要运行的内核数,或者在启动时从提示中./cfd.exe -np 30选择使用 30 个内核。
系统有 4 个物理插槽 = 4 个 CPU;每个 CPU 有 10 个内核 = 总共 40 个物理内核;每个内核都有超线程,因此cat /proc/cpuinfo将返回 80 个CPU或编号从 0 到 79 的内核。
Q1:我对超线程何时以及如何发生感到困惑,如果它在幕后自动发生,或者我是否必须以某种方式手动调用它来发生。
对于具有许多内核的系统,但为了简单起见,我将继续使用上述数字,现在当使用 PBS Pro 和 qsub 并且用户是否qsub -l select=1:ncpu=20分配了 10 个物理内核,例如 10..19,并且还分配了 10 …
hyperthreading ×10
processor ×2
affinity ×1
android ×1
c# ×1
c++ ×1
cpu-cores ×1
linux-kernel ×1
matlab ×1
mpi ×1
multicore ×1
openmp ×1
pbs ×1
performance ×1
windows ×1