单机多进程做密集型科学计算靠谱吗?能节省时间吗…刚测试了下 ,发现并没用多大提升
1个CPU、4个核 intel 超线程技术,可看到8个核,但我只开4个进程,每个进程负责整个任务的四分之一的计算任务 和单个进程,跑起来的效率怎么差不多呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
1个CPU、4个核 intel 超线程技术,可看到8个核,但我只开4个进程,每个进程负责整个任务的四分之一的计算任务 和单个进程,跑起来的效率怎么差不多呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
先给个公式吧。
所需线程数=CPU可用核心数/(1-阻塞系数)
其中计算密集型阻塞系数趋向于0,IO密集趋向于1。具体需要通过实验来确定。
所以,你现在这种情况。
所需线程数=8/(1-0)=8, 应该用8个线程来试试。而你这里只用了4个,虽然如此,性能还是应该比单线程要好,因为毕竟由4个核在分担计算量。
但是,你却发现没有多大区别,我只能认为,你没有书写正确的多线程逻辑,造成名义上是多线程,实际上是串行的情况。
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当道了啊?