gpt4 book ai didi

arrays - 为 Fortran 子例程使用巨大的工作区数组

转载 作者:行者123 更新时间:2023-12-02 07:21:26 24 4
gpt4 key购买 nike

当我查看线性代数子例程的遗留 Fortran 代码时,我经常注意到这一点:

他们不会使用一堆单独的数组,而是将所有数组连接成一个大的工作区数组,并使用指针来划分变量的开始位置。

它们甚至将独立的非数组变量连接成数组。这样做有什么好处吗?如果我想编写优化的代码,我应该这样做吗?

最佳答案

不,如果你想保持头脑清醒,就不要那样做。这是 1960 年代到 1980 年代的一种做法,当时不可能进行动态分配,他们只需要参数列表中的少量工作数组。

在旧的子例程中,您有一长串参数,然后是一两个工作数组:

   call SUB(N1, N2, N3, M1, M2, M3, A, B, C, WRK, IWRK)

如果您需要传递 10 个工作数组而不是一个,那么调用它就太困难了。

但在 21 世纪,最重要的是保持代码的可读性和清晰性,然后再对其进行优化。

顺便说一句,由于 false sharing,在内存中有一些要关闭的数量甚至可能是有害的.

这并不意味着您应该将内存碎片化太多,但是当您确实要按顺序访问时,将内存放在一起是有意义的。这就是为什么使用数组结构而不是结构数组的原因。

关于arrays - 为 Fortran 子例程使用巨大的工作区数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com