c++ - 单机多进程做密集型科学计算靠谱吗?能节省时间吗…刚测试了下 ,发现并没用多大提升
PHP中文网
PHP中文网 2017-04-17 11:40:45
[C++讨论组]

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(6)
怪我咯

先给个公式吧。

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

所以,你现在这种情况。

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

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

PHPz

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

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

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

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

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

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

黄舟

Linus: talk is cheap show me the code

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

伊谢尔伦

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

阿神

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

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

黄舟

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

难道web当道了啊?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号