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

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

...

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

module 

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

73448c0d9d31244f2216c20de0707aca.png

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部