Re: [问题] 效率

楼主: DMFC (DMFC)   2013-11-11 20:15:23
→ 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 内
: 则情况会更糟
: 请问有什么方法可以处理这窘境
作者: charlesdc (MoOn)   2012-01-11 21:28:00
ram还是有机会的 你的电脑12G!=你的程式就能跑到这么多你再查看看你的编译器有没有上限可以设定至于内存不够不一定会直接死掉有遇过的case是他会去抓虚拟内存储存所以很慢
楼主: DMFC (DMFC)   2012-01-12 00:22:00
感谢你的回应~但我程式连12G的1%都吃不到所以连 SWAP 的机会都没有我这里讲的SWAP就是你说的虚拟内存且我有确认过~的的确确没有吃到 SWAP

Links booklink

Contact Us: admin [ a t ] ucptt.com