线程例子,在多核多线程CPU下出错分析.该怎么解决

详解超线程、多核、多处理器的区别_CPU_硬件知识_IT 经验_爱安网
现在大家都知道超线程是Intel 所研发的一种技术,超线程的英文是HT技术,原先只应用于Intel Xeon处理器中,之后陆续应用在Pentium 4中,将技术主流化,下面小编为大家讲解超线程、多核、多处理器的区别
  大家都知道超线程技术对多任务处理有优势,但是如果我们运行单线程运用软件时,超线程技术将会系统性能,对于不支持多处理器工作的软件在双处理器上运行时出错的概率要比单处理器上高很多一起来看看小编为大家推荐的超线程、多核、多处理器的区别的教程吧。
    1、超线程技术
  每个单位时间内,CPU只能处理一个线程(Thread)。除非有两个核心处理单元,否则要想在单位时间内处理超过一个的线程是不可能的。
  超线程HT(Hyper-Threading)技术是在单个核心处理单元中集成两个逻辑处理单元,也就是一个实体内核(共享的运算单元),两个逻辑内核(有各自独立的处理器状态),在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。因此新一代的P4 的面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2 Cache(二级缓存)则保持不变,这些部分是被分享的。
  图1超线程技术处理进程
  虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每各CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
    2、多处理器
  多处理器(Multiprocessor)系统由不同芯片上的多个处理器组成。多处理器系统因IT服务器的应用在上世纪九十年代得以普及。在当时,它们是可以插入机架服务器的处理器主板。现在,多处理器系统可以构建在同一块电路板上,处理器之间通过一个高速通信接口连接。
  图2 多处理器系统具有远程互联结构的独立高速缓存与MMU内存管理单元
  多处理器系统的复杂度低于多核系统,因为它们本质是互连在一起的单芯片CPU。多处理器系统的不足在于其高昂的价格,因为它们需要多个芯片,这比单芯片解决方案要昂贵得多。
    3、双核与多核处理器
  双核处理器是指单个芯片上有两个CPU,而多核处理器则是指在单个芯片上包含任意多个(如2、4或8)CPU的处理器。多核处理器的挑战在于软件开发部分。系统性能提升的多少直接与通过多线程编程源代码的并行程度有关。
  图3 多核处理器共享具有短程互联结构的高速缓存和MMU内存管理单元
  4、总结
  超线程由于处理器实际上只有一个核心,能够提升的效能约为5~15%左右,且万一发生资源互抢的情形时,整体效能反而会下降。双核共用cache,程序设计合理性能可能比双处理器性能更好,多处理器可能还需在两个cache间传输数据,多核和超线程的区别如图4。
  图 4 超线程和多核区别
  以上就是爱安网小编为大家讲解的关于超线程、多核、多处理器的区别点,需要的朋友快来看看吧,想了解更多精彩教程请继续关注爱安网网站!
无相关信息
周鸿祎今日在个人公众号上发表言论,认为王思聪对共享充
阿里巴巴旗下电商平台的用户数量虽已超过4.5亿人,但增
减持后,徐自发仍持有120.25万股;此前4月5日,徐自发配偶
摩根士丹利的分析师最近给出了预测,初步估算了谷歌Waym
值得注意的是,哔哩哔哩影业成立至今营收为零,2016年净利
韩国SK海力士周三宣布,已决定将晶圆代工业务分拆成为独
主流的移动VR芯片包括三星Exynos8890、华为海思麒麟95
很多朋友最近很关注AMD Ryzen 5什么时候发布,下面小编
顶级的Ryzen平台的三大件(CPU、主板、内存)最高预算大约
三星新旗舰Galaxy S8将继续坚持双平台策略,一方面采用
美国时间22号晚AMD终于正式解禁了新一代高端桌面处理
关于AMD A10-7800搭配什么主板好的问题,本文已经为大家
(C)CopyRight
Inc All Rights Reserved.工具类服务
编辑部专用服务
作者专用服务
采用多线程技术提高多核CPU利用率
中央处理器CPU(Central Pocessing Unit)是计算机的核心部件,也是最宝贵的计算资源,CPU处理速度的快慢直接影响到整个系统的性能.纵观CPU发展史,我们可以发现,早期的发展主要通过提高主频率来提升CPU性能,而现在的发展方向主要是通过扩充核心数来增加性能.不论CPU技术如何发展,不断提高系统总体性能,提升设备使用率总是人们所追求的目标,特别是在广播电视领域.数据量大、计算密集、时效性强等特征注定要让广电人想方设法提高CPU利用率.本文在简述CPU技术的发展后,将从软件开发角度谈谈如何采用多线程技术提高CPU的利用率,并分析将多线程技术应用到广电领域非常重要的视音频编解码系统时CPU利用率的变化.通过数据分析,得出将多线程技术应用到视音频编解码是一种提高多核CPU利用率的有效方法.
作者单位:
重庆广播电视集团(总台)
年,卷(期):
机标分类号:
在线出版日期:
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社wPrime(多线程计算测试工具 测试多核CPU更准确) 2.06
wprime是一款多线程计算测试工具,测试多核心处理器比super pi更准确。与superpi的单线程运算不同的的是,wprime在打开一个软件界面下,可以支持多个核心的处理器运算,甚至是8核心处理器
wPrime(多线程计算测试工具 测试多核CPU更准确) 2.06
高速下载器通道
其他下载地址
下载不了?|Linux_多核系统下绑定进程或线程到指定CPU_核执行
我的图书馆
Linux_多核系统下绑定进程或线程到指定CPU_核执行
coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。”。在文章中提到了Linux下的一个工具,taskset,可以设定单个进程运行的CPU。
同时,因为最近在看redis的相关资料,redis作为单进程模型的程序,为了充分利用多核CPU,常常在一台server上会启动多个实例。而为了减少切换的开销,有必要为每个实例指定其所运行的CPU。
下文,将会介绍taskset命令,以及sched_setaffinity系统调用,两者均可以指定进程运行的CPU实例。
taskset是LINUX提供的一个命令(ubuntu系统可能需要自行安装,schedutils package)。他可以让某个程序运行在某个(或)某些CPU上。
以下均以redis-server举例。
1)显示进程运行的CPU
命令taskset -p 21184
显示结果:
pid 21184's current affinity mask: ffffff
注:21184是redis-server运行的pid
& & & 显示结果的ffffff实际上是二进制24个低位均为1的bitmask,每一个1对应于1个CPU,表示该进程在24个CPU上运行
2)指定进程运行在某个特定的CPU上
命令taskset -pc 3 21184
显示结果:
pid 21184's current affinity list: 0-23pid 21184's new affinity list: 3
注:3表示CPU将只会运行在第4个CPU上(从0开始计数)。
3)进程启动时指定CPU
命令taskset -c 1 ./redis-server ../redis.conf
结合这上边三个例子,再看下taskset的manual,就比较清楚了。
OPTIONS -p, --pid operate on an existing PID and not launch a new task
-c, --cpu-list specify a numerical list of processors instead of a bitmask. The list may contain multiple items, separated by comma, and ranges. For example, 0,5,7,9-11.
2.sched_setaffinity系统调用
如下文章部分翻译自:
sched_setaffinity可以将某个进程绑定到一个特定的CPU。你比操作系统更了解自己的程序,为了避免调度器愚蠢的调度你的程序,或是为了在多线程程序中避免缓存失效造成的开销,你可能会希望这样做。如下是sched_setaffinity的例子,其函数手册可以参考():
1 /* Short test program to test sched_setaffinity
2 * (which sets the affinity of processes to processors).
3 * Compile: gcc sched_setaffinity_test.c
4 *& & & & & & & -o sched_setaffinity_test -lm
5 * Usage: ./sched_setaffinity_test
7 * Open a "top"-window at the same time and see all the work
8 * being done on CPU 0 first and after a short wait on CPU 1.
9 * Repeat with different numbers to make sure, it is not a
10 * coincidence.
13 #include &stdio.h&
14 #include &math.h&
15 #include &sched.h&
17 double waste_time(long n)
19 & & double res = 0;
20 & & long i = 0;
21 & & while(i &n * 200000) {
22 & & & & i++;
23 & & & & res += sqrt (i);
25 & & return
28 int main(int argc, char **argv)
30 & & unsigned long mask = 1; /* processor 0 */
32 & & /* bind process to processor 0 */
33 & & if (sched_setaffinity(0, sizeof(mask), &mask) &0) {
34 & & & & perror("sched_setaffinity");
37 & & /* waste some time so the work is visible with "top" */
38 & & printf ("result: %f\n", waste_time (2000));
40 & & mask = 2; /* process switches to processor 1 now */
41 & & if (sched_setaffinity(0, sizeof(mask), &mask) &0) {
42 & & & & perror("sched_setaffinity");
45 & & /* waste some more time to see the processor switch */
46 & & printf ("result: %f\n", waste_time (2000));
根据你CPU的快慢,调整waste_time的参数。然后使用top命令,就可以看到进程在不同CPU之间的切换。(启动top命令后按“1”,可以看到各个CPU的情况)。
父进程和子进程之间会继承对affinity的设置。因此,大胆猜测,taskset实际上是首先执行了sched_setaffinity系统调用,然后fork+exec用户指定的进程。
TA的最新馆藏[转]& 上传我的文档
 下载
 收藏
JAVA工程师,擅长软件开发,软件测试等。
 下载此文档
正在努力加载中...
多核多线程期末考试复习完美总结
下载积分:1000
内容提示:多核多线程期末考试复习完美总结
文档格式:PPTX|
浏览次数:14|
上传日期: 17:35:51|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
多核多线程期末考试复习完美总结
官方公共微信}

我要回帖

更多关于 python 多线程 多核 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信