Re: [问题] 效率

楼主: Yagyu (miss u)   2013-11-11 21:27:35
※ 引述《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
sum(coeff(1:np)*cdexp)
请问这边是要将整个 coeff(1:23000) 乘上 cdexp 再做 sum 吗?
会这么问是因为我不确定你未贴上程式码部分是否还有 np 的 loop
如果没有 np loop, 同时 cdexp 只是个常数,不会随 nx,ny,nz 变动
那可以试着将这部份移出循环外, 这样省得每次 loop 都要重算一遍
如果有 np loop, 那请无视我的想法
另外输出的部份
do i=1,nx
do j=1,ny
do k=1,nz
csumout(i,j,k)=sum(coeff(1:np)*cdexp)/Vol
end do
end do
end do
do k=1,nz
do j=1,ny
do i=1,nx
csumout(i,j,k)=sum(coeff(1:np)*cdexp)/Vol
end do
end do
end do
两者差异 请参考彭国伦先生的fortran工具书 应该是在阵列章节中的多维阵列那边
没记错的话 是跟内存存放资料方式有关 这边变动我想绝对有帮助
: 请问一下
: 由于资料量不算小
: 目前测试 nx=ny=nz=47, np=23000
: 上面贴的部份是需要最久计算的部份
: 普通执行需要约两分钟(测试用参数)
: 若是把第三行去掉
: 则可以10秒内结束
: 可是我就是要把这个资料输出
: 才用了一个三维 ARRAY 把资料存起来
: 然后离开这个 LOOP 后再写出
: 如果把 WRITE 写在 LOOP 内
: 则情况会更糟
: 请问有什么方法可以处理这窘境

Links booklink

Contact Us: admin [ a t ] ucptt.com