作者astroodie (宇宙)
看板MacDev
标题Re: [问题]core 2 Duo电脑 让一个程式跑两个cpu
时间Thu Dec 6 12:48:11 2007
嗯 我赞同的你的看法 : )
如果以一台机器跑的话 似乎multi-thread的方式比较简单有效率
目前在考虑试试看学 openMP(Shared Memory Multiprocessing)
因为如果只跑一台机器的话openMP会比MPI的方式快
但如果有更多机器的话(不过现在没有) MPI又会比较好
pthread我不清楚 也不知道对fortran的支援性如何
(或许我应该把程式改写成C? 但在这种科学计算上fortran比较快一些)
但似乎又多了一个选择了 : D 谢谢
还有一个原因是因为我不是学资讯出生的
所以我倾向官方网站有大量examples的方式 :P
※ 引述《yllan (蓝永伦)》之铭言:
: ※ 引述《astroodie (宇宙)》之铭言:
: : 有, i,j,k 可以想像成 三维空间的x,y,z
: : 而t 是时间
: : 空间中每个格子(u(i,j,k))的流体要怎麽流
: : 必须要知道旁边的格子(u(i+-1,j+-1,k+-1))的状态
: : 而下一个时间点(t=t+dt) 必须知道现在现在(t=t)的状态
: : 所以拆开的话 还是要在交界处沟通(不过只用沟通最边边的状态)
: : 而时间会切隔成数万份或更多 所以手动merge是不可行的
: : 我目前知道的方法是mpi
: : (不过还在学怎麽设定环境和使用)
: : 但也如你所说得 我才一台机器 用mpi是杀鸡用牛刀啊
: : anyway, 还是很谢谢你 : )
: 照你的例子来看,如果只用知道四周上下左右前後共 26 个格子的话,
: 平行化的潜力很大!用 MPI 好像不错,不过如果时间切得很细,一直要
: 沟通边界也蛮伤的。(特别是空间很大的时候)
: 在这种 case 底下我建议开 multi-thread 来跑,对空间分割,每个
: thread 负责一半空间,这样直接对同一份资料操作就不用一直沟通来
: 沟通去。只要注意每个 iteration 结束後都要停下来确认另一个 iteration
: 也结束才能再继续。(这点 MPI 也一样吧!)
: (我念书的时候曾经念过,pthread 是 userland library,OS 没办法
: 把他分到两个 CPU 上。不过刚刚在 OSX 测了一下 pthread 是没问题的)
: 不过我只会 C 语言的语法,Fortran 不知道怎麽用 pthread... 召唤 mj!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 128.174.51.218
1F:推 mjhsieh:你用intel fortran? 12/06 16:33
2F:→ astroodie:我用gfortran : ) 12/07 03:41
3F:推 mjhsieh:我最後归顺 g95 了, that means bye bye openmp 12/07 12:43
4F:→ astroodie:还好我的程式是用77的格式写的 ^^" 12/09 02:45