西西河

主题:【求助】:请教信息技术方面的大牛有关多线程的问题 -- newtime

共:💬51 🌺45 新:
全看分页树展 · 主题 跟帖
家园 关于并行计算的一些基本概念的回忆

两年没碰并行计算了,我当年还是下过一些功夫,靠这个混到学位了。

1、线程、进程的区别

简单的说,就是线程间共享内存地址空间,可以直接进行数据交换,而进程不共享内存地址空间,需通过进程间通信进行数据交换。

咋一看,多线程模式数据交换更方便、直接,但事实上,对于计算密集型的并行计算而言,多进程效率远高于多线程。其根本原因是缓存的影响。

多级缓存结构是冯诺依曼以来,计算机体系结构的最大进步,解决了运算器的高速要求和存储器的大容量要求的矛盾,通过小而快的寄存器、一级缓存、二级缓冲,到大而慢的内存、外存的分级处理,大大提高了运算效率。一般而言,计算密集型程序读写内存的指令数在4%左右,内存延迟一般在100时钟周期以上,计算机体系架构和编译器优化效果的关键,就在对读写内存的指令数的处理上。

多线程程序的最大问题,就是将各线程间缓存的处理交给了操作系统,用线程池等方法进行分配,而操作系统并不清楚程序员的实际意图,所以效率一般不高。而多进程程序各进程之间不会相互干扰,需要进行信息传递的数据由程序员显式指定,亲自设计通信方法,有利于针对缓存的优化。

究其根本,多线程程序的起源,是在单个CPU上满足多个用户的非计算密集型需求,只要延迟小于几秒,用户的体验不会受到影响,采用多线程编程,可以很容易的写出满足多用户业务操作的商业应用系统。而对于计算密集型任务,常用高效的处理方法是批处理。

简而言之,多线程程序不适合采用目前的多级缓存、多核处理器体系架构下设计计算密集型程序。事实上,OpenMP这套东西效果也很差,因为其前身MPP机器的缓存结构,与MPI所针对的集群结构相比,也是非常简单的,目前的多核机器的缓存结构,更适合于MPI。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河