作者:liu-zebing_284 | 来源:互联网 | 2023-01-31 10:43
我常常在查看线性代数子程序的遗留Fortran代码时,注意到这一点:
他们不是使用一堆独立的数组,而是将所有数组连接成一个大的工作空间数组,并使用指针来划分变量的开始位置.
它们甚至将独立的非数组变量连接成数组.这样做是否有好处,如果我想编写优化代码,我应该这样做吗?
1> Vladimir F..:
不,如果你想要保持理智,不要这样做.这是20世纪60年代至80年代的一种做法,当时没有可能的动态分配,他们只想在参数列表中使用少量的工作数组.
在旧的子例程中,您有一长串参数,然后是一个或两个工作数组:
call SUB(N1, N2, N3, M1, M2, M3, A, B, C, WRK, IWRK)
如果你需要传递10个工作数组而不是一个,那么调用它就太难了.
但在21世纪,最重要的是保持代码的可读性和清晰性,并且只有在优化之后才能保持代码的清晰.
由于错误共享,在内存中关闭一些数量的BTW甚至可能是有害的.
这并不意味着你应该过多地分解你的记忆,但是当你确实按顺序访问它时,将它们保持在一起是有意义的.这就是为什么使用数组结构而不是结构数组的原因.