多核多线程技术编程

多核多线程技术编程


2024年5月2日发(作者:尼康d700和d7000)

几年之前,CPU的性能还主要取决于CPU的主频,经

过超摩尔定律的发展后,没过多长时间CPU的主频速度

就已接近“极限”,使得单单靠提高CPU的主频来提升

性能变得非常困难。

目前,Intel、AMD等CPU生产商都转而采用了多核技术来提升CPU性能,甚至

提出了群核CPU的概念。这意味着,要充分发挥多核CPU的性能,程序就必须采用多

线程并发计算的方式,传统的串行程序将会极大地浪费多核CPU的运算能力!

C++是上世纪80年代诞生的语言,它的前身是同样风靡全球的C语言。一直以

来它都以代码效率卓越著称,进入多核时代后,因为C++标准库没有提供多线程支持,

要用C++开发出充分利用多核CPU的程序将面临很大挑战。

于是,在C++社区出现了不少优秀的库以支持并行编程,如各种跨平台的线程

库,Open MP,Clik++等。另一方面,微软也从Win2K开始不断地加入线程池API(如

QueueUserWork Item),C++09标准也明确地表示要加入多线程的支持。

使用线程库编写并行程序的优点是可以精确调度各个线程,并且可以在所有

C++编译器里使用。不过要充分发挥多核CPU的性能,还要考虑很多因素,主要难点

有:

死锁编写多线程必然会遇到同步问题,如果同步控制出现问题,就可能出现死

锁或脏数据。

线程之间通信使用何种机制在多个线程之间通信?即要保证通信数据同步又

要保证效率。

负载平衡分配到每个线程的工作量要尽量平衡,避免一个线程忙一个线程闲

的情形发生。

资源匹配程序应该使用多少个线程?过少的线程不能充分利用CPU的多核优

势,而过多的线程会造成线程调度过于频繁同样会降低效率。

OpenMP是目前比较流行的C++并行编程方式,它通过在代码中插入专用的

pragma编译指令来指示编译器把串行代码编译成并行程序。

它的优点是易于使用,几乎不用修改原代码就可对老程序进行并发支持的改

造。问题是它必须要有编译器的支持,尽管目前不少编译器都提供了OpenMP的支持,

但它毕竟不是C++的一部分,甚至它都不是真正意义上的C++库。。

现在,我们又有了一个新选择:Intel Thread Building Blocks(TBB,线程构建

模块)。TBB是一个开源的C++模板库,能够运行在 Windows、Linux、Macintosh以

及UNIX等系统上,只要是标准的C++编译器都可以使用它。

以下是程序测试的实验案例和测试结果:

for ( int j = 0; j < num; j++ )

{

k[j]=j;

for(int p=0;p<10000;p++)cout(p); //进行很大的for循环,又调用函数,主

要目的就是让它耗时间;

}

for(int i=0;i

printf("%d ",k[i]);


发布者:admin,转转请注明出处:http://www.yc00.com/num/1714620869a2482179.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信