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

退出打印视图

更新时间: 2016 年 6 月
 
 

Fortran 接口

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

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

  • 在同一调用中,参数类型必须一致。例如,不要在同一个调用中混合使用 REAL*8 和 REAL*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 语句必须在代码中的所有其他语句的前面,但 PROGRAM 或 SUBROUTINE 语句除外。

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

  • 类型独立-Oracle Developer Studio 性能库支持将自动识别数据参数类型的接口,因此不需要使用取决于类型的前缀(S、D C 或 Z)。在 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.