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 性能库调用例程的例程。
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.