作者yllan (蓝永伦)
看板MacDev
标题Re: [问题]core 2 Duo电脑 让一个程式跑两个cpu
时间Thu Dec 6 11:00:54 2007
※ 引述《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: 59.112.176.150
1F:→ mjhsieh:主要还是要先 review 他的 algorithm 才行 12/06 12:32