Fortran 可分配的内部存储器表示

2024-01-04

我想知道 fortran 可分配数组的内部内存表示是什么。

我理解这比原始指针更复杂一点,因为形状和等级也必须存储。

我还猜想它取决于实现,因为我在中找不到信息Fortran 2003 标准 http://www.j3-fortran.org/doc/2003_Committee_Draft/04-007.pdf.

但是,我想知道使用哪种结构来表示可分配数组(即使只针对一个编译器)。

我知道这个问题有点宽泛,但我们将不胜感激。


可分配数组、指针数组以及假定形状数组参数均使用数组描述符(也称为涂料矢量)。

任何编译器都可以有自己的数组描述符结构。它可以在编译器手册中找到。但描述符有一个标准化格式,用于与 C 进行通信(以及 Fortran 之外可能与 C 进行通信的其他软件)。

这个标准描述符可能不会被编译器内部使用,但它可以。如果它也在内部使用,那么编译器在调用 C 互操作过程时不必准备新的描述符。例如,gfortran计划支持标准描述符“最好是原生格式” https://gcc.gnu.org/wiki/ArrayDescriptorUpdate.

Intel 描述了一个与 C 互操作描述符不同的本机数组描述符示例:https://software.intel.com/en-us/node/678452 https://software.intel.com/en-us/node/678452.

C 互操作数组参数的数组描述符的结构由以下定义:关于 Fortran 与 C 的进一步互操作性的技术规范 ISO/IEC TS 29113:2012,它将成为 Fortran 2015 的一部分。

在C头文件中ISO_Fortran_binding.h被定义为用 Fortran 描述符(假定的形状、指针或可分配的)定义的 C 结构。

它看起来如下(从IBM 网站 https://www.ibm.com/support/knowledgecenter/SSGH4D_15.1.0/com.ibm.xlf151.aix.doc/language_ref/interop-iso-f-binding-def.html,某些细节可能是编译器特定的):

CFI_cdesc_t 
    A type definition that describes a C descriptor. It contains the following structure members:

void *base_addr
    The base address of the data object that is described. For deallocated allocatable objects, base_addr is NULL. 
size_t elem_len

        For scalars: The size in bytes of the data object that is described.
        For arrays: The size in bytes of one element of the array.

int version
    The version number of the C descriptor. Currently, the only valid value is available by using the CFI_VERSION macro.
CFI_attribute_t attribute
    The attribute code of the C descriptor. For the valid values for attribute, see Table 1.
CFI_type_t type
    The type code of the C descriptor. Describes the type of the object that is described by the C descriptor. For the valid values for type, see Table 2. 

CFI_rank_t rank
    The rank of the object that is described by the C descriptor. Its value must be in the range 0 ≤ rank ≤ CFI_MAX_RANK. A value of 0 indicates that the object is a scalar. Otherwise, the object is an array.
CFI_dim_t dim[]
    An array of size rank that describes the lower bound, extent, and stride of each dimension.

There is a reserved area between rank and dim. The size of the reserved area is 12 words in 32-bit mode and 9 words in 64-bit mode.

所引用的CFI_类型也定义在ISO_Fortran_binding.h header.

因此,尽管此描述符可能与编译器内部使用的不完全相同,但它是一个很好的示例,说明 Fortran 数组描述符中应该包含哪种数据组件。

但是,请注意,gfortran(一种非常常见的编译器)尚未使用这种类型的描述符。只有一个使用新描述符的实验版本 https://gcc.gnu.org/wiki/ArrayDescriptorUpdate当前描述符在手册中有描述。状态也提到了Fortran 与 C 的进一步互操作性 https://gcc.gnu.org/onlinedocs/gfortran/Further-Interoperability-of-Fortran-with-C.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fortran 可分配的内部存储器表示 的相关文章

随机推荐

  • 如何将光标移动到文档末尾?

    我想将光标移动到脚本开头的文档末尾 我怎么做 我已经知道如何将光标移动到文档的开头 如下所述here https stackoverflow com questions 26945026 how can i move the cursor
  • 如何通过 https 启动 java servlet?

    我正在尝试在 eclipse 中的 tomcat 上运行 servlet 当我在服务器上运行时 servlet 会运行并为我提供如下链接 http localhost 8443 AuthServer 服务器 我已将 Tomcat 服务器配置
  • google app engine webapp 中 jinja2 自动转义的问题

    我决定安装 jinja2 与我的 webapp 应用程序一起使用 以支持自动转义功能 因此 我将 jinja2 安装到 python 2 5 中 并在项目中创建了一个符号链接来指向该目录 大部分情况下工作正常 除了 当我实际尝试使用 aut
  • 如何更改 Visual Studio 2012 Express 项目模板?

    例如 我不希望我的类和接口符合 StyleCop 在非 Express 版本中 我们可以在以下位置找到并更改类模板 C Program Files x86 Microsoft Visual Studio 11 0 Common7 IDE I
  • 更改 SFSafariViewController 的色调颜色?

    正如标题所说 如何更改 iOS 9 中新的 SFSafariViewController 的整体色调颜色 iOS 10 的一些消息 现在我们有两个属性来控制整体外观SFSafariViewController source link htt
  • Java Runtime.getRuntime().exec() 带引号

    我正在尝试通过 linux 上的 exec 调用运行 ffmpeg 但是我必须在命令中使用引号 ffmpeg 需要它 我一直在查看 processbuilder 和 exec 的 java 文档以及 stackoverflow 上的问题 但
  • 对服务与工厂感到困惑

    据我了解 当在工厂内部时 我返回一个被注入控制器的对象 当在服务内部时 我正在使用以下方法处理对象this并且不返回任何东西 我假设服务是始终是单身人士 并且一个新工厂对象被注入到每个控制器中 然而 事实证明 工厂对象也是单例对象吗 演示示
  • JSF MVC设计问题

    我有一个 JSF 支持 bean 设计问题 现在 我的支持 bean 保存 UI 显示信息和业务模式数据 人们建议模型和视图应该分开 那么创建不同的 bean 来保存 UI 显示数据并让支持 bean 引用它是个好主意吗 那么创建不同的 b
  • 我可以只选择 MYSQL 中的一列而不是全部,以使其更快吗?

    我想做这样的事情 query mysql query SELECT userid FROM users WHERE username username the user id 因为我想要的只是与用户名对应的用户ID 通常的方法是 query
  • 如何格式化 SQLCMD 输出

    我正在使用下面的命令行使用 SQLCMD 运行 SQL 查询 sqlcmd S Server Q select top 100 From people d people t 10 该表有 20 列 当我查看输出命令行窗口时 文本会换行并使其
  • 客户端 MVC 与服务器 MVC

    我希望从其他用户那里获得一些关于服务器端 MVC 优势的意见 拥有许多 javascript 库的强大功能 服务器端 MVC 服务器还有什么用处呢 您可以轻松地使用带有模板和 REST API 的客户端 MVC 来创建响应速度更快的应用程序
  • subprocess.Popen,从子进程(子进程)获取变量[重复]

    这个问题在这里已经有答案了 我想知道如何处理它 我从子进程到父进程获取变量 值 我正在将子进程作为脚本运行 父级看起来像 import subprocess p subprocess Popen abaqus python getData
  • 为什么负载不能绕过同一核心上的另一个线程从写入缓冲区写入的值?

    如果CPU核心使用写缓冲区 则负载可以从写缓冲区绕过最近的存储到引用的位置 而无需等到它出现在缓存中 但是 正如它所写的记忆一致性和连贯性入门 https lagunita stanford edu c4x Engineering CS31
  • Azure AD B2C 在注册策略中预填充自定义属性

    从 Web 应用程序 ASP Net MVC 调用时 Azure AD B2C 是否支持在注册策略中预填充自定义属性 我们可以创建自定义 SignUp 属性 但我们无法在文档中找到如何传递值来填充自定义属性的规范 如果开箱即用不支持此功能
  • 自定义绑定类无法正常工作

    目前我正在研究 WPF 数据绑定 但遇到了一个我不明白的问题 所以我把问题发布在这里 也许你已经知道地理出了什么问题 首先 我在Windows Vista 32位下使用Visual Studio 2008 问题也存在于Windows 7 R
  • 使用哈希合并全局内存写入

    我的问题涉及合并全局写入到 CUDA 中数组的一组动态变化的元素 考虑以下内核 global void kernel int n int odata int idata int hash int i blockIdx x blockDim
  • 未捕获的类型错误:无法在“Node”上执行“appendChild”:参数1不是“Node”类型[重复]

    这个问题在这里已经有答案了 var line p strong name strong message field message body und 0 value p console log line console log docume
  • /admin/ 处的 NoReverseMatch 未找到带有参数“()”和关键字参数“{}”的“注销”

    我读过了this one https stackoverflow com questions 10145583 django 1 4 and noreversematch at admin error 但我使用的是 Django 1 5 我
  • 如何使用javascript获取会话值

    我有一个类来处理会话变量 这是附上的示例 namespace General public class Session public Session public static string UserID get return HttpCo
  • Fortran 可分配的内部存储器表示

    我想知道 fortran 可分配数组的内部内存表示是什么 我理解这比原始指针更复杂一点 因为形状和等级也必须存储 我还猜想它取决于实现 因为我在中找不到信息Fortran 2003 标准 http www j3 fortran org do