Sun Studio 12:Fortran 库参考

2.3 非标准 Fortran 95 内函数

下列函数f95 编译器中视为内函数,但它们不属于 Fortran 95 标准。

2.3.1 基本线性代数函数 (BLAS)

在使用 -xknown_lib=blas 进行编译时,编译器会将对下列例程的调用识别为内函数,并对其进行优化,然后将其链接到 Sun Performance Library 实现。编译器会忽略用户提供的这些例程版本。

表 2–2 BLAS 内函数

功能 

说明 

CAXPY

DAXPY

SAXPY

ZAXPY

标量和向量的乘积并加上向量 

CCOPY

DCOPY

SCOPY

ZCOPY

复制向量 

CDOTC

CDOTU

DDOT

SDOT

ZDOTC

ZDOTU

点乘积(内部乘积) 

CSCAL

DSCAL

SSCAL

ZSCAL

按比例缩放向量 

有关这些例程的更多信息,请参见《Sun 性能库用户指南》。

2.3.2 区间运算内函数

下表列出了在针对区间运算进行编译 (-xia) 时编译器可识别的内函数。有关详细信息,请参见《Fortran 95 Interval Arithmetic 编程参考》。

DINTERVAL

DIVIX

INF

INTERVAL

ISEMPTY

MAG

MID

MIG

NDIGITS

QINTERVAL

SINTERVAL

SUP

VDABS

VDACOS

VDASIN

VDATAN

VDATAN2

VDCEILING

VDCOS

VDCOSH

VDEXP

VDFLOOR

VDINF

VDINT

VDISEMPTY

VDLOG

VDLOG10

VDMAG

VDMID

VDMIG

VDMOD

VDNINT

VDSIGN

VDSIN

VDSINH

VDSQRT

VDSUP

VDTAN

VDTANH

VDWID

VQABS

VQCEILING

VQFLOOR

VQINF

VQINT

VQISEMPTY

VQMAG

VQMID

VQMIG

VQNINT

VQSUP

VQWID

VSABS

VSACOS

VSASIN

VSATAN

VSATAN2

VSCEILING

VSCOS

VSCOSH

VSEXP

VSFLOOR

VSINF

VSINT

VSISEMPTY

VSLOG

VSLOG10

VSMAG

VSMID

VSMIG

VSMOD

VSNINT

VSSIGN

VSSIN

VSSINH

VSSQRT

VSSUP

VSTAN

VSTANH

VSWID

WID

 

 

 

2.3.3 其他供应商的内函数

f95 编译器可识别许多由其他供应商(包括 Cray Research, Inc.)的 Fortran 编译器定义的传统内函数。这些内函数现已过时,应避免使用。

表 2–3 Cray CF90 和其他编译器的内函数

功能 

参数 

说明 

CLOC

([C=]c) 

获取字符对象的地址 

COMPL

([I=]i) 

逐位补充单词。使用 NOT(i)。 

COT

([X=]x) 

一般余切。(另外还有:DCOT、QCOT) 

CSMG

([I=]i,[J=]j,[K=]k) 

有条件的标量合并 

DSHIFTL

([I=]i,[J=]j,[K=]k) 

将双对象 i 和 j 向左移动 k 个位 

DSHIFTR

([I=]i,[J=]j,[K=]k) 

将双对象 i 和 j 向右移动 k 个位 

EQV

([I=]i,[J=]j) 

逻辑等价。使用 IOER(i,j)。 

FCD

([I=]i,[J=]j) 

构造字符指针。 

GETPOS

([I=]i) 

获取文件位置 

IBCHNG

([I=]i, [POS=]j) 

更改单词中指定位的通用函数。 

ISHA

([I=]i, [SHIFT=]j) 

一般算术移位 

ISHC

([I=]i, [SHIFT=]j) 

一般循环移位 

ISHL

([I=]i, [SHIFT=]j) 

一般左移位 

LEADZ

([I=]i) 

统计前导 0 位的数量 

LENGTH

([I=]i) 

返回成功传送的 Cray 单词数 

LOC

([I=]i) 

返回变量的地址(请参见1.4.32 loc:返回对象的地址

NEQV

([I=]i,[J=]j) 

逻辑非等价。使用 IOER(i,j)。 

POPCNT

([I=]i) 

统计设为 1 的位数。 

POPPAR

([I=]i) 

计算位总体的奇偶校验 

SHIFT

([I=]i,[J=]j) 

循环式左移。使用 ISHFT(i,j) 或 ISHFTC(i,j,k)。 

SHIFTA

([I=]i,[J=]j) 

带符号扩展的算术移位。 

SHIFTL

([I=]i,[J=]j) 

补零式左移。使用 ISHFT(i,j) 或 ISHFTC(i,j,k)。 

SHIFTR

([I=]i,[J=]j) 

补零式右移。使用 ISHFT(i,j) 或 ISHFTC(i,j,k)。 

TIMEF

() 

返回自第一次调用后经过的时间 

UNIT

([I=]i) 

返回 BUFFERIN 或 BUFFEROUT 的状态 

XOR

([I=]i,[J=]j) 

逻辑互斥 OR。使用 IOER(i,j)。 

有关 VMS Fortran 77 内函数列表,另请参见2.3.4.2 内存函数

2.3.4 其他扩展

Fortran 95 编译器可识别以下其他内函数:

2.3.4.1 MPI_SIZEOF

MPI_SIZEOF( x, size, error)

返回指定变量 x 的机器表示形式的字节数大小。如果 x 是数组,它返回基本元素的大小,而不是整个数组的大小。

输入;任意类型的变量或数组 

size

输出;整数;x 的字节数大小

error

输出;整数;设置为如果检测到错误显示错误代码,否则为零。 

2.3.4.2 内存函数

内存分配、重新分配和解除分配函数 malloc()realloc()free() 均以 f95 内函数实现。有关详细信息,请参见1.4.35 mallocmalloc64reallocfree:分配/重新分配/解除分配内存