单机多进程做密集型科学计算靠谱吗?能节省时间吗…刚测试了下 ,发现并没用多大提升


1个CPU、4个核 intel 超线程技术,可看到8个核,但我只开4个进程,每个进程负责整个任务的四分之一的计算任务 和单个进程,跑起来的效率怎么差不多呢?

计算机科学 多进程 C++ 并行

毒岛的胸是我的 11 years, 10 months ago

这里搞C++的人好少啊!!~

难道web当道了啊?

最无聊的人 answered 11 years, 10 months ago

因为并行是给特殊的计算机结构准备的。单机的话,如果是普通计算机,多进程应该没多大变化;但是如果是超级计算机,多进程可以充分利用计算机中的多个节点。

另外多进程的复杂性可以通过MPI之类的进程间通信框架解决。实际上写多进程的科学计算程序并不难。

APR18TH answered 11 years, 10 months ago

要看你的进程有没有充分利用多个CPU核心,看一下多进程和单进程各个核心CPU利用率
如果各个核心是真正并行的,不存在什么依赖关系,运算速度应该会提升

深水用魔蟹改 answered 11 years, 10 months ago

Linus: talk is cheap show me the code

不可能四个进程和一个进程效率一样,除非:1.你的4个进程实现成了串行2.整个计算过程本身的消费时间和进程切换时间相似。

愤怒的小土豆 answered 11 years, 10 months ago

Linus 大神會說「並行計算是浪費所有人的時間」。

推崇所谓的“并行”极大地浪费了大家的时间。“并行更高效”的高大上理念纯粹是扯淡。大容量缓存可以提高效率。在一些没有附带缓存的微内核上搞并行毫无意义,除非是针对大量的规则运算(比如图形处理)。

http://www.realworldtech.com/forum/?threadid=146066&curpostid=146227

如果你這四個任務是彼此獨立的,那麼性能沒有顯著提升就一定是你程序的問題;
如果這四個任務彼此高度依賴,那麼沒有多少性能提升倒也並不奇怪。

並行不是提升效率的靈丹妙藥,它只是對某些問題比順序執行更好用。

樓上的公式未免太過簡單,把並行想像成簡單地切蛋糕,要真是如此,並行更高效的理念就永遠正確了。

普隆德拉的微风 answered 11 years, 10 months ago

先给个公式吧。

所需线程数=CPU可用核心数/(1-阻塞系数)
其中计算密集型阻塞系数趋向于0,IO密集趋向于1。具体需要通过实验来确定。

所以,你现在这种情况。

所需线程数=8/(1-0)=8, 应该用8个线程来试试。而你这里只用了4个,虽然如此,性能还是应该比单线程要好,因为毕竟由4个核在分担计算量。

但是,你却发现没有多大区别,我只能认为,你没有书写正确的多线程逻辑,造成名义上是多线程,实际上是串行的情况。

一切皆归于无 answered 11 years, 10 months ago

Your Answer