主题:【求助】:请教信息技术方面的大牛有关多线程的问题 -- newtime
两年没碰并行计算了,我当年还是下过一些功夫,靠这个混到学位了。
1、线程、进程的区别
简单的说,就是线程间共享内存地址空间,可以直接进行数据交换,而进程不共享内存地址空间,需通过进程间通信进行数据交换。
咋一看,多线程模式数据交换更方便、直接,但事实上,对于计算密集型的并行计算而言,多进程效率远高于多线程。其根本原因是缓存的影响。
多级缓存结构是冯诺依曼以来,计算机体系结构的最大进步,解决了运算器的高速要求和存储器的大容量要求的矛盾,通过小而快的寄存器、一级缓存、二级缓冲,到大而慢的内存、外存的分级处理,大大提高了运算效率。一般而言,计算密集型程序读写内存的指令数在4%左右,内存延迟一般在100时钟周期以上,计算机体系架构和编译器优化效果的关键,就在对读写内存的指令数的处理上。
多线程程序的最大问题,就是将各线程间缓存的处理交给了操作系统,用线程池等方法进行分配,而操作系统并不清楚程序员的实际意图,所以效率一般不高。而多进程程序各进程之间不会相互干扰,需要进行信息传递的数据由程序员显式指定,亲自设计通信方法,有利于针对缓存的优化。
究其根本,多线程程序的起源,是在单个CPU上满足多个用户的非计算密集型需求,只要延迟小于几秒,用户的体验不会受到影响,采用多线程编程,可以很容易的写出满足多用户业务操作的商业应用系统。而对于计算密集型任务,常用高效的处理方法是批处理。
简而言之,多线程程序不适合采用目前的多级缓存、多核处理器体系架构下设计计算密集型程序。事实上,OpenMP这套东西效果也很差,因为其前身MPP机器的缓存结构,与MPI所针对的集群结构相比,也是非常简单的,目前的多核机器的缓存结构,更适合于MPI。
- 相关回复 上下关系8
🙂【求助】:请教信息技术方面的大牛有关多线程的问题 newtime 字2225 2009-08-14 00:44:29
🙂问题已经解决 newtime 字262 2009-08-17 02:14:40
🙂祝贺一下 1 autoeagle 字144 2009-08-17 02:27:51
🙂关于并行计算的一些基本概念的回忆
🙂多线程多进程的优劣不可一概而论 浪人甲 字111 2009-08-20 19:36:27
🙂有什么并行计算baby level的书推荐么?谢谢啊 不高兴 字0 2009-08-20 10:23:02
🙂多线程这玩意纯粹是微软推广出来的 太极掌 字28 2009-08-19 02:37:33
🙂多线程的初衷不就是为了省资源吗 HAL 字108 2009-08-25 00:22:54