标签: hyperthreading

超线程是否导致系统不稳定?

我正在用新的Intel I7四核处理器构建一台PC.启用超线程后,它将在任务管理器中报告8个核心.

我的一些同事说,超线程会使系统不可靠,并建议将其关闭.

任何一个好人都可以启发我和其余的stockoverflow用户.

接下来:我一直在使用超线程,并且它一直在使用.没有任何不稳定性.我正在使用:

  • Microsoft Server 2008 64位
  • Microsoft SQL Server 2008 64位
  • Microsoft Visual Studio 2008
  • Diskeeper服务器
  • 大量控制(Telerik,Dundas,Rebex,Resharper)

intel hyperthreading

6
推荐指数
1
解决办法
6530
查看次数

SSE和超线程

SSE寄存器是否在逻辑处理器之间共享或重复(超线程)?对于SSE重程序而言,我是否可以期望与正常程序相同的加速(英特尔声称对于具有超线程的处理器为30%)?

simd hyperthreading

6
推荐指数
2
解决办法
2829
查看次数

C/C++/Assembly以编程方式检测Windows,Mac和Linux上的超线程是否处于活动状态

我已经可以在所有这三个平台上正确检测逻辑处理器的数量.

为了能够正确检测物理处理器/核心的数量,我必须检测是否支持超线程并且是否激活(或者如果您愿意,则启用),如果是,则将逻辑处理器的数量除以2以确定物理处理器的数量.

Perphaps我应该提供一个例子:

启用了超线程的四核Intel CPU具有4个物理内核,8个逻辑处理器(超线程创建4个逻辑处理器).所以我的当前函数将检测到8而不是所需的4.

因此,我的问题是,是否有办法检测是否支持超线程并启用?

c c++ assembly hyperthreading

6
推荐指数
1
解决办法
4676
查看次数

最新Xeons上的FP密集型超线程性能

我们最近购买了一台双Intel X5650工作站,在Ubuntu 10.04下运行浮点密集型仿真.

每个X5650都有6个内核,因此共有12个内核.这些代码非常平行,所以我主要用12个线程运行它,并通过"top"观察大约"1200%"的处理器利用率.

在BIOS中启用了超线程,因此操作系统名义上可以看到24个可用核心.如果我将线程数增加到24,则top报告大约2000%的处理器利用率 - 但是,实际代码性能似乎没有增加20/12.

我的问题是 - HyperThreading如何在最新一代的Xeon上实际运行?浮点密集型代码是否会因为每个核心调度多个线程而受益?如果工作集大小与高速缓存大小相比,答案会更改,相比之下要大几倍,或者是否存在大量I/O操作(例如,将模拟输出写入磁盘)?

另外 - 当启用超线程时,我应该如何解释"顶部"的处理器利用率百分比?

floating-point optimization performance multithreading hyperthreading

6
推荐指数
1
解决办法
1936
查看次数

在6核Intel Xeon中关闭超线程

我们得到了一个12核的MacPro来进行蒙特卡罗计算.它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行以充分利用它们.但是,我们的计算效率比12x100%高出24x50%更高效,因此我们尝试Processor在系统首选项中通过窗格关闭超线程以获得更高的性能.人们也可以关闭HT

hwprefs -v cpu_ht=false
Run Code Online (Sandbox Code Playgroud)

然后我们进行了一些测试,这是我们得到的:

  1. 12个并行任务同时运行w /或没有HT让我们失望.
  2. 如果HT关闭,24个并行任务松散20%(不是我们想象的-50%)
  3. 当HT打开时,从24个任务切换到12个任务会使效率降低20%(同样令人惊讶)
  4. 当HT关闭时,从24切换到12不会改变任何东西.

似乎超线程只是降低了我们计算的性能,并且没有办法避免它.我们用于计算的程序是用Fortran编写的,并使用gfortran.有没有办法让这个硬件更高效?


更新:我们的蒙特卡罗计算(MCC)通常是分步进行的,以避免数据丢失和由于其他原因(并不总是可以避免这些步骤).在我们的例子中,每一步都包含许多具有可变持续时间的模拟.由于每个步骤在多个并行任务之间分割,因此它们也具有可变持续时间.基本上,所有更快的任务都必须等到最慢完成.这一事实迫使我们采取更大的步骤,由于平均而导致时间偏差减少,因此处理器不会浪费时间等待.这是我们拥有12*2.66 GHz而不是24*1.33 GHz的动机.如果可以关闭HT,那么通过从24个任务w/HT切换到12个没有HT的任务,我们可以获得大约+ 10%的性能.但是,测试表明我们松了20%.

对于测试,我使用了相当大的步骤,但通常步骤较短,因此效率变得更高.

还有一个原因 - 我们的一些计算需要3-5 GB的内存,因此您可能会看到我们有12个快速任务的经济性.我们正在努力实现共享内存,但它将成为一个冗长的术语项目.因此,我们需要了解如何尽可能快地制作现有的硬件/软件.

macos fortran intel gfortran hyperthreading

6
推荐指数
1
解决办法
6307
查看次数

OpenMP特定线程数急剧减速

我运行了一个OpenMP程序来执行Jacobi方法,它运行得非常好,2个线程执行略超过2x 1线程,4个线程比1个线程快2倍.我觉得一切都很完美......直到我准确地达到了20,22和24个线程.我一直把它分解,直到我有这个简单的程序

#include <stdio.h>
#include <omp.h>

int main(int argc, char *argv[]) {
    int i, n, maxiter, threads, nsquared, execs = 0;
    double begin, end;

    if (argc != 4) {
        printf("4 args\n");
        return 1;
    }

    n = atoi(argv[1]);
    threads = atoi(argv[2]);
    maxiter = atoi(argv[3]);
    omp_set_num_threads(threads);
    nsquared = n * n;

    begin = omp_get_wtime();
    while (execs < maxiter) {

#pragma omp parallel for
        for (i = 0; i < nsquared; i++) {
            //do nothing
        }
        execs++;
    }
    end = omp_get_wtime();

    printf("%f seconds\n", …
Run Code Online (Sandbox Code Playgroud)

c multithreading overhead openmp hyperthreading

6
推荐指数
1
解决办法
421
查看次数

用于超线程的最佳gcc优化开关

背景

我有一个EP(Embarassingly Parallell)C应用程序在我的笔记本电脑上运行四个线程,其中包含运行在2.67GHz的intel i5 M 480.这个CPU有两个超线程内核.

四个线程在不同的数据子集上执行相同的代码.代码和数据在几个缓存行中都没有问题(完全适合L1,有余地).代码不包含任何分区,基本上是CPU绑定的,使用所有可用的寄存器并执行一些内存访问(在L1之外)以在序列完成时写入结果.

编译器是mingw64 4.8.1,即最新版本.最佳基本优化级别似乎是-O1,这导致四个线程比两个完成得更快.-O2和更高的运行速度更慢(两个线程比四个完成得更快但比-O1慢)和-Os一样.每个线程平均每秒执行337万个序列,每个序列大约有780个时钟周期.平均每个序列执行25.5个子操作或每30.6个循环一个.

因此,两个超线程在30.6个周期中并行执行,一个线程将按顺序执行35-40或17.5-20个周期.

我在哪里

我认为我需要的是生成的代码,这些代码不是那么密集/高效,以至于两个超线程不断地碰撞本地CPU的资源.

这些开关工作得相当好(当按模块编译时)

-O1 -m64 -mthreads -g -Wall -c -fschedule-insns
Run Code Online (Sandbox Code Playgroud)

当编译一个#include所有其他模块的模块时也是如此

-O1 -m64 -mthreads -fschedule-insns -march=native -g -Wall -c -fwhole-program
Run Code Online (Sandbox Code Playgroud)

两者之间没有明显的性能差异.

有没有人尝试过这个并取得了不错的成绩?

c performance gcc x86-64 hyperthreading

6
推荐指数
1
解决办法
1682
查看次数

超线程如何影响并行化?

我在OpenMPHyperThreaded CPU上使用代码.

如果其他条件相同,那么非HyperThreaded CPU的性能会如何变化

我注意到100%的处理器利用率,无论我运行多少线程,但改变线程数确实提高了性能.怎么会这样?

非INTEL多线程CPU的故事是否相同?

c++ parallel-processing multithreading openmp hyperthreading

6
推荐指数
1
解决办法
517
查看次数

何时使用 MPI、OpenMP 和 PBS Pro 进行超线程?

在运行 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 …

parallel-processing mpi hyperthreading pbs

6
推荐指数
1
解决办法
3015
查看次数

在Java中启用Intel超线程

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

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

java multithreading hyperthreading

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