作者astroodie (宇宙)
看板MacDev
标题Re: [问题]core 2 Duo电脑 让一个程式跑两个cpu
时间Thu Dec 6 04:42:07 2007
※ 引述《yllan (蓝永伦)》之铭言:
: ※ 引述《astroodie (宇宙)》之铭言:
: : 我有一个单纯的程式(fortran的)
: : 里面有非常多的回圈(流体力学的程式)
: : ex.
: : do t=0,10,1d-4
: : do k=1,8
: : do j=1,1024
: : do i=1,1024
: : ...
: : 为了提昇效率
: : 有没有办法简单的让我的Core 2 duo mac book pro
: : 的两颗cpu一起跑?
: : (因为我发现只有一颗跑100% 另一颗在发呆, 但神奇的是偶尔还会交换)
: : 还是只能靠MPI?
: : 又如果只能靠MPI, 有没有人能推荐一些关於入门的网页或文献(for mac)
: : 谢谢 : )
: 你的计算有 data dependency 吗?拿你的例子来说
有, 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, 还是很谢谢你 : )
--
我原本以为(或幻想)对一台机器可能会有内建平行计算的技术XD
只要按个扭开启某个功能就可以平行计算了 XD
: do t=0,10,1d-4
: do k=1,8
: do j=1,1024
: do i=1,1024
: ...
: 可不可以拆成两个程式分别计算一半?
: do t=0,5,1d-4 do t=5,10,1d-4
: do k=1,8 do k=1,8
: .... ....
: 或者是
: do t=0,10,1d-4 do t=0,10,1d-4
: do k=1,4 do k=5,8
: 可以的话,在你机器上(才一台机器,dual core CPU XD)最简单的方法就是
: 拆成两个程式同时跑再把结果手动 merge 起来吧!
: 如果不行的话... 就算用 MPI 也是没救。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 128.174.51.218
1F:推 mjhsieh:果然是幻想啊... 只是一句话, multithread programming 12/06 08:56
2F:→ mjhsieh:和 mpi programming 都是需要很大力气去改的 12/06 08:56
3F:→ mjhsieh:by the way, leopard 内建 openmpi 12/06 08:57
4F:→ astroodie:谢谢你 ^^ 不过内建的openmpi不支援fortran XD 12/06 08:59
5F:→ mjhsieh:好吧,那我尽快搞一个跟内建互补的 version 出来 12/06 10:05
6F:推 yllan:你说的「按钮就跑出来」的技术是 OpenMP... :P 12/06 11:01