下列函数在 f95 编译器中视为内函数,但它们不属于 Fortran 95 标准。
在使用 -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 性能库用户指南》。
下表列出了在针对区间运算进行编译 (-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 |
|
|
|
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 内存函数。
Fortran 95 编译器可识别以下其他内函数:
MPI_SIZEOF( x, size, error) 返回指定变量 x 的机器表示形式的字节数大小。如果 x 是数组,它返回基本元素的大小,而不是整个数组的大小。 |
|
x |
输入;任意类型的变量或数组 |
size |
输出;整数;x 的字节数大小 |
error |
输出;整数;设置为如果检测到错误显示错误代码,否则为零。 |
内存分配、重新分配和解除分配函数 malloc()、realloc() 和 free() 均以 f95 内函数实现。有关详细信息,请参见1.4.35 malloc、malloc64、realloc 和 free:分配/重新分配/解除分配内存。