Oracle® Developer Studio 12.5:性能库用户指南

退出打印视图

更新时间: 2016 年 6 月
 
 

Fortran 接口

Oracle Developer Studio 性能库包含 f95 接口和旧的 f77 接口,以便保持与标准的 LAPACK 和 BLAS 库和现有代码的兼容性。Oracle Developer Studio 性能库 f95 和旧的 f77 接口使用以下约定:

  • 所有参数都是通过引用传递的。

  • 在同一调用中,参数类型必须一致。例如,不要在同一个调用中混合使用 REAL*8REAL*4 参数。

  • 数组是逐列存储的。

  • 索引从 1 开始,与标准 Fortran 惯例一致。

在调用 Oracle Developer Studio 性能库例程时,应注意以下信息:

  • 不要使用 Fortran 95 INTERFACE 语句构建子例程。应使用 USE SUNPERF 语句。

  • 不要使用 -ext_names=plain 编译从 Oracle Developer Studio 性能库调用例程的例程。

Fortran SUNPERF 模块与 Fortran 95 结合使用

Oracle Developer Studio 性能库提供了一个 Fortran 模块,以便于使用 Fortran 95 程序的功能。要使用此模块,可在 Fortran 95 代码中包括以下行。

USE SUNPERF

USE 语句必须在代码中的所有其他语句的前面,但 PROGRAMSUBROUTINE 语句除外。

SUNPERF 模块包含的接口简化了调用序列,并提供以下功能:

  • 类型独立-Oracle Developer Studio 性能库支持将自动识别数据参数类型的接口,因此不需要使用取决于类型的前缀(SD CZ)。在 FORTRAN 77 例程中,必须将类型指定为例程名称的一部分。例如,DGEMM 是一个双精度矩阵乘法,SGEMM 是一个单精度矩阵乘法。在使用 Fortran 95 接口调用 GEMM 时,Fortran 将从传递的参数中推导出类型。将单精度参数传递到 GEMM 所获得的结果相当于指定了 SGEMM,传递双精度参数所获得的结果相当于指定了 DGEMM。例如,CALL DSCAL(20,5.26D0,X,1) 可更改为 CALL SCAL(20, 5.26D0, X, 1)

  • 编译时检查-在 FORTRAN 77 中,编译器通常无法确定应将什么参数传递到某个特定例程。在 Fortran 95 中,USE SUNPERF 语句使得编译器可以确定传递到每个 Oracle Developer Studio 性能库例程的每个参数的数量、类型、大小和形状。它可在编译过程中针对预期的值对调用进行检查,并显示错误。

  • 64 位整数支持-在使用 Oracle Developer Studio 性能库附带的 64 位接口时,必须将整数参数提升至 64 位,并且必须通过在例程名称中附加 _64 来修改例程名称。使用 SUNPERF 模块时,64 位整数将被自动识别,这就不需要在例程名称中附加 _64 了,如以下代码示例所示:

    SUBROUTINE SUB(N,ALPHA,X,Y)
    USE SUNPERF
    INTEGER(8) N
    REAL(8) ALPHA, X(N), Y(N)
    
    ! EQUIVALENT TO DAXPY_64(N,ALPHA,X,1_8,Y,1_8)
    CALL DAXPY(N,ALPHA,X,1_8,Y,1_8)
    
    END
    

有关使用 Oracle Developer Studio 性能库 64 位接口的详细说明,请参见针对启用了 64 位的操作环境编译代码

由于 sunperf.mod 文件是用 -dalign 编译的,因此必须使用 -dalign 编译包含 USE SUNPERF 语句的任何代码。如果未使用 -dalign 编译代码,则会发生以下错误。

 use sunperf
              ^     
    "test_code.f", Line = 2, Column = 11: ERROR: Procedure "SUNPERF" and this compilation must both be compiled with -dalign, or without -dalign.