[Topic DIscussion] 班门弄斧,谈谈多线程和超线程
Tofloor
poster avatar
流星追月
deepin
2025-03-05 17:46
Author

上次发的贴,居然成热贴,万万没想到。更没想到有同学居然分不清什么多线程和超线程,不管真分不清,还是假分不清,我找了一些资料,大家一起学习,我也多学习学习,艺多不压身。

芯片的多线程(Multithreading)和超线程(Hyper-Threading)是两种不同的技术,旨在提高处理器的并行处理能力和资源利用率。

多线程(Multithreading)

定义
多线程是指在一个处理器核心上同时执行多个线程的技术。通过时间片轮转或硬件支持,处理器可以在多个线程之间快速切换,从而实现并行处理。

实现方式

  1. 时间片轮转:操作系统通过时间片轮转调度算法,在多个线程之间快速切换。
  2. 硬件多线程:处理器硬件支持多个线程上下文切换,减少切换开销。

优点

  1. 提高资源利用率:当一个线程等待I/O操作时,处理器可以切换到另一个线程,减少空闲时间。
  2. 简化编程模型:多线程编程模型相对简单,易于理解和实现。

缺点

  1. 上下文切换开销:频繁的线程切换会带来一定的开销,影响性能。
  2. 资源竞争:多个线程共享同一核心的资源,可能导致资源竞争和性能下降。

超线程(Hyper-Threading)

定义
超线程是英特尔提出的一种技术,通过在一个物理核心上模拟出多个逻辑核心,使得每个逻辑核心可以同时执行不同的线程。

实现方式

  1. 硬件模拟:通过复制部分硬件资源(如寄存器状态),使得一个物理核心可以同时处理多个线程的指令流。

优点

  1. 提高并行性:通过模拟多个逻辑核心,显著提高处理器的并行处理能力。
  2. 减少空闲时间:当一个线程等待资源时,另一个线程可以继续执行,提高资源利用率。

缺点

  1. 资源竞争:虽然超线程提高了并行性,但物理核心的资源仍然是有限的,多个逻辑核心之间可能会竞争资源,影响性能。
  2. 复杂性增加:超线程技术的实现增加了处理器的复杂性,可能带来更高的功耗和发热。

多线程 vs 超线程

特性 多线程(Multithreading) 超线程(Hyper-Threading)
实现方式 时间片轮转或硬件支持 硬件模拟多个逻辑核心
资源利用率 提高资源利用率,减少空闲时间 显著提高资源利用率
并行性 有限并行性 高并行性
上下文切换 有上下文切换开销 减少上下文切换开销
资源竞争 多个线程共享同一核心资源 多个逻辑核心竞争物理资源
复杂性 相对简单 复杂性较高

总结

  • 多线程通过时间片轮转或硬件支持实现并行处理,适用于提高资源利用率和简化编程模型,但存在上下文切换开销和资源竞争问题。

  • 超线程通过硬件模拟多个逻辑核心,显著提高并行性和资源利用率,但增加了处理器的复杂性和资源竞争的可能性。

    简单理解:多线程是软解,编程繁杂突兀,并行计算能力一般。超线程是硬解,高效并行计算,开发人员需学习适配。

    上次说的某大企业服务器翻车,就是芯片没有超线程技术去硬解应用的超线程请求,而是靠编译器编译来软解超线程请求,直接导致性能开销太大,代码突兀,卡顿,死机都会出现,也算是翻车名场面了。一些单位居然没有实际测试验证就大规模采购,造成的损失巨大。

  • 龙芯超线程问题难题:

    功能

    1. 高性能计算:通过SIMD指令加速并行计算,提升数据处理效率。
    2. 低功耗设计:优化指令集以降低功耗,延长设备续航。
    3. 安全性增强:引入安全指令,防止常见攻击,如缓冲区溢出。
    4. 兼容性:兼容主流指令集,便于移植现有软件。

    运用难题

    1. 生态系统不完善:缺乏成熟的开发工具和库,增加开发难度。
    2. 兼容性问题:与现有软件和硬件的兼容性可能不足,需额外适配。
    3. 开发成本高:开发人员需学习新指令集,增加时间和经济成本。
    4. 性能优化挑战:充分发挥LATX性能需深入理解其架构,优化难度较大。
    5. 市场接受度:在x86和ARM主导的市场中,推广LATX面临较大竞争压力。
      写了一些东西和大家探讨,互相学习。
Reply Favorite View the author
All Replies
mozixun
Moderator
2025-03-05 19:05
#1

多线程就是一个处理器多个核心,但一个核心代表一个逻辑处理器

超线程就是一个处理器多个核心,但一个核心能模拟出两个"逻辑处理器"

复杂性增加:超线程技术的实现增加了处理器的复杂性,可能带来更高的功耗和发热。

如果优化够好,功耗和发热体验不明显,比如AMD 锐龙7 7840HS的封神级处理器

Reply View the author
神末shenmo
deepin
Spark-App
Solutions Team Moderator
2025-03-06 12:31
#2

上次说的某大企业服务器翻车,就是芯片没有超线程技术去硬解应用的超线程请求,而是靠编译器编译来软解超线程请求,直接导致性能开销太大,代码突兀,卡顿,死机都会出现,也算是翻车名场面了。一些单位居然没有实际测试验证就大规模采购,造成的损失巨大。

还阴阳怪气呢,趁早别用deepseek了,幻觉是会传染的

解释一下楼上说的,没有超线程的多核心 CPU 是几个核心几个线程的多线程CPU,有超线程的多核心CPU就是一个物理核心模拟出多个(目前主要是两个,历史上出现过更多个但是效果不好)逻辑核心来增加线程数的CPU

超线程也是一种多线程技术,把这两个东西并列在一起对比是不可理喻的

动动手,动动脑子,打个字,小红书bilibili知乎,不行百度(除了贴吧)也行,哪管用 CSDN 呢?尽信 AI 不如无 AI

Reply View the author
mozixun
Moderator
2025-03-06 14:29
#3
神末shenmo

上次说的某大企业服务器翻车,就是芯片没有超线程技术去硬解应用的超线程请求,而是靠编译器编译来软解超线程请求,直接导致性能开销太大,代码突兀,卡顿,死机都会出现,也算是翻车名场面了。一些单位居然没有实际测试验证就大规模采购,造成的损失巨大。

还阴阳怪气呢,趁早别用deepseek了,幻觉是会传染的

解释一下楼上说的,没有超线程的多核心 CPU 是几个核心几个线程的多线程CPU,有超线程的多核心CPU就是一个物理核心模拟出多个(目前主要是两个,历史上出现过更多个但是效果不好)逻辑核心来增加线程数的CPU

超线程也是一种多线程技术,把这两个东西并列在一起对比是不可理喻的

动动手,动动脑子,打个字,小红书bilibili知乎,不行百度(除了贴吧)也行,哪管用 CSDN 呢?尽信 AI 不如无 AI

超线程也是一种多线程技术,把这两个东西并列在一起对比是不可理喻的

感觉这AI更像在对比超线程与不超线程,而不是多线程本身

而且,超线程技术是AMD最早提出的,但英特尔是将其发扬光大的

Reply View the author
流星追月
deepin
2025-03-06 14:45
#4
mozixun

超线程也是一种多线程技术,把这两个东西并列在一起对比是不可理喻的

感觉这AI更像在对比超线程与不超线程,而不是多线程本身

而且,超线程技术是AMD最早提出的,但英特尔是将其发扬光大的

多线程和超线程都是为了解决并行任务而设定的。

服务器都是Intel的超线程芯片,那跑在芯片上的应用都会设计超线程并行计算任务,而现在信创替换的是多线程,没有芯片内部的超线程,那跑的应用需要底层代码大更换,浩大的工程。

Loongarch的LASX是256位向量,将AVX2的256位向量翻译成LASX256位向量明显简单。Neon128位向量,你看看怎么翻译?短时间能翻译好?

Neon是ARM的SIMD指令集,用来加速多媒体和信号处理任务。Neon对内存对齐有要求,比如128位数据需要16字节对齐,否则性能会下降甚至出错。所以在分配内存的时候,要确保数据对齐,需要使用特定的内存分配函数或者编译器指令,可能需要复制到对齐的内存中,这会增加内存使用和处理时间。如果对不齐,多出的代码需要另外构建代码去处理。那在ARM服务器上跑的应用需要把底层代码全部重写才有可能适配,浩瀚的工程,折腾人的玩意。

那上次新闻提到的工控机性能跑不满,只能跑一半,就是因为数据不齐导致,内生的缺陷,没有经过实地实景的测试验证就应用起来,小孩过家家一样了。

Reply View the author
方老四
deepin
2025-03-07 16:22
#5

我理解的多线程应该是操作系统进程管理的一种策略,把一个任务分成多个线程来并行执行,每个线程可能运行在不同的核上,最后得到结果。超线程是把一个物理核模拟成两个逻辑核,每个逻辑核单独执行任务,对于进程而言就是两个核,类似于电脑的虚拟化技术,把一套硬件模拟成多个虚拟机。

多线程是一种软件策略,超线程是一种硬件设计。

Reply View the author
流星追月
deepin
2025-03-07 16:31
#6
方老四

我理解的多线程应该是操作系统进程管理的一种策略,把一个任务分成多个线程来并行执行,每个线程可能运行在不同的核上,最后得到结果。超线程是把一个物理核模拟成两个逻辑核,每个逻辑核单独执行任务,对于进程而言就是两个核,类似于电脑的虚拟化技术,把一套硬件模拟成多个虚拟机。

多线程是一种软件策略,超线程是一种硬件设计。

是的,就是这么理解的。现在是把ARM软件策略去适配服务器上应用的硬件策略,对不上号。软件策略短时间无法编译好硬件策略。现在只能把服务器上跑的应用修改,去适配ARM上的软件策略,浩大的工程,无形中也被ARM架构绑架了,很难再更换其他架构平台了,工程量实在太大了。

Reply View the author