fortran subroutine_Fortran:派生数组与数组传递进子程序耗费时间比较

在优化程序的过程中发现其中存在大量的派生类型变量(type),同时发现Fortran子程序可以接受type类型数组中元素,即将type类型中元素当作独立的数组传递。传递过程如下所示:

...

为了测试派生类型数组传递的速度,编写如下程序进行对比

module 

更改不同的num值可以得到程序耗时结果,

73448c0d9d31244f2216c20de0707aca.png

从表格中可以看出传递type数组中元素所耗时间是直接传递数组所需时间的3倍,当然两种数组的大小应该在10000000以上才能体现差别。尽管在传递数组中元素在程序编写上很方便,但是程序中存在需要频繁传递变量的子程序时需要格外的注意。避免传递type数组额外耗时的解决方案:

  1. 使用module将变量封装在不同模块中,子程序使用不同module来达到传递变量的作用。经过上述的程序可以发现使用type数组类型和使用数组在子程序中的耗时是一致的,说明子程序在传递函数的过程中会将type数组转变为数组,同时在运算之后会传递回去。
  2. 将type中的元素直接定义为数组,在需要传递数组时直接传递type中数组。在实践的过程中往往需要的是动态数组,如果type中的元素过多,在使用时可能会导致各元素大小不一致,需要额外的检查程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值