作者DMFC (sole)
看板Fortran
标题Re: [问题] 效率
时间Mon Nov 11 20:15:23 2013
→ biggun:卡在I/O,把程式丢到ramdisk里跑看看,当然ramdisk要够大
不好意思~我不是资工相关科系
也许概念上有点问题
我好奇的是
我只不过是把上一行 csum=sum(coeff(1:np)*cdexp)/Vol
所得到的结果 csum 存入一个三维矩阵 csumout(i,j,k)
为什麽会跟 I/O 有关呢
(此时所有资料不是都还乖乖的待在记忆体内嬷)
不是只有在 write 时
把资料写出才会扯到硬碟 I/O ?
还是这里指的 I/O 并非我想的硬碟 I/O?
推 charlesdc:其实还有一种可能 你换一台ram很大的电脑跑看看
→ charlesdc:有可能是你电脑的ram不够用
→ charlesdc:不然就是那个三维的矩阵透过动态方式建立在释放看看
我是用动态方式 (allocate)
且~如果是 ram 不够
我想我程式应该是要直接死掉
(走到 SWAP 的境界应该会更更更更慢吧)
再者
我使用的机器是一台有 12G RAM 的 LINUX OS 环境的机器
这个小小的程式 memory 吃不到 1% ...
所以不应当会是 memory 相关问题吧 (我猜)
※ 引述《DMFC (sole)》之铭言:
: 贴一部份程式码,fortran90语法
: do i=1,nx ; do j=1,ny ; do k=1,nz
: csum=sum(coeff(1:np)*cdexp)/Vol
: csumout(i,j,k)=csum
: end do ; end do ; end do
: 请问一下
: 由於资料量不算小
: 目前测试 nx=ny=nz=47, np=23000
: 上面贴的部份是需要最久计算的部份
: 普通执行需要约两分钟(测试用参数)
: 若是把第三行去掉
: 则可以10秒内结束
: 可是我就是要把这个资料输出
: 才用了一个三维 ARRAY 把资料存起来
: 然後离开这个 LOOP 後再写出
: 如果把 WRITE 写在 LOOP 内
: 则情况会更糟
: 请问有什麽方法可以处理这窘境
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 148.6.26.109
1F:→ charlesdc:ram还是有机会的 你的电脑12G!=你的程式就能跑到这麽多 11/11 21:28
2F:→ charlesdc:你再查看看你的编译器有没有上限可以设定 11/11 21:29
3F:→ charlesdc:至於记忆体不够不一定会直接死掉 11/11 21:29
4F:→ charlesdc:有遇过的case是他会去抓虚拟记忆体储存所以很慢 11/11 21:30
5F:→ DMFC:感谢你的回应~但我程式连12G的1%都吃不到 11/12 00:22
6F:→ DMFC:所以连 SWAP 的机会都没有 11/12 00:23
7F:→ DMFC:我这里讲的SWAP就是你说的虚拟记忆体 11/12 00:23
8F:→ DMFC:且我有确认过~的的确确没有吃到 SWAP 11/12 00:24