57ad953d7b
* Reorganize documenation based on rocm-docs-core
* Move build, install and contributing guides to docs
* Bump readthedocs config to Ubuntu 20.04
* Add more direct links to the API modules
* Pin rocm-docs-core version, add dependabot
- Use the pip package to have rocm-docs-core pinned
- Add dependabot config to update pinned packages (including rocm-docs-core)
* fixup! Add more direct links to the API modules
---------
[ROCm/hip commit: ae5f8714f4]
510 строки
8.3 KiB
Python
510 строки
8.3 KiB
Python
"""
|
|
Copyright (c) 2015-2021 Advanced Micro Devices, Inc. All rights reserved.
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
"""
|
|
|
|
"""
|
|
1. This files uses Python3 to run
|
|
|
|
List of device functions:
|
|
acosf
|
|
acoshf
|
|
asinf
|
|
asinhf
|
|
atan2f
|
|
atanf
|
|
atanhf
|
|
cbrtf
|
|
ceilf
|
|
copysignf
|
|
cosf
|
|
coshf
|
|
cospif
|
|
cyl_bessel_i0f
|
|
cyl_bessel_i1f
|
|
erfcf
|
|
erfcinvf
|
|
erfcxf
|
|
erff
|
|
erfinvf
|
|
exp10f
|
|
exp2f
|
|
expf
|
|
expm1f
|
|
fabsf
|
|
fdimf
|
|
fdividef
|
|
floorf
|
|
fmaf
|
|
fmaxf
|
|
fminf
|
|
fmodf
|
|
frexpf
|
|
hypotf
|
|
ilogbf
|
|
isfinite
|
|
isinf
|
|
isnan
|
|
j0f
|
|
j1f
|
|
jnf
|
|
ldexpf
|
|
lgammaf
|
|
llrintf
|
|
llroundf
|
|
log10f
|
|
log1pf
|
|
logbf
|
|
lrintf
|
|
lroundf
|
|
modff
|
|
nanf
|
|
nearbyintf
|
|
nextafterf
|
|
norm3df
|
|
norm4df
|
|
normcdff
|
|
normcdfinvf
|
|
normf
|
|
powf
|
|
rcbrtf
|
|
remainderf
|
|
remquof
|
|
rhypotf
|
|
rintf
|
|
rnorm3df
|
|
rnorm4df
|
|
rnormf
|
|
roundf
|
|
rsqrtf
|
|
scalblnf
|
|
scalbnf
|
|
signbit
|
|
sincosf
|
|
sincospif
|
|
sinf
|
|
sinhf
|
|
sinpif
|
|
sqrtf
|
|
tanf
|
|
tanhf
|
|
tgammaf
|
|
truncf
|
|
y0f
|
|
y1f
|
|
ynf
|
|
acos
|
|
acosh
|
|
asin
|
|
asinh
|
|
atan
|
|
atan2
|
|
atanh
|
|
cbrt
|
|
ceil
|
|
copysign
|
|
cos
|
|
cosh
|
|
cospi
|
|
cyl_bessel_i0
|
|
cyl_bessel_i1
|
|
erf
|
|
erfc
|
|
erfcinv
|
|
erfcx
|
|
erfinv
|
|
exp
|
|
exp10
|
|
exp2
|
|
expm1
|
|
fabs
|
|
fdim
|
|
floor
|
|
fma
|
|
fmax
|
|
fmin
|
|
fmod
|
|
frexp
|
|
hypot
|
|
ilogb
|
|
isfinite
|
|
isinf
|
|
isnan
|
|
j0
|
|
j1
|
|
jn
|
|
ldexp
|
|
lgamma
|
|
llrint
|
|
llround
|
|
log
|
|
log10
|
|
log1p
|
|
log2
|
|
logb
|
|
lrint
|
|
lround
|
|
modf
|
|
nan
|
|
nearbyint
|
|
nextafter
|
|
norm
|
|
norm3d
|
|
norm4d
|
|
normcdf
|
|
normcdfinv
|
|
pow
|
|
rcbrt
|
|
remainder
|
|
remquo
|
|
rhypot
|
|
rint
|
|
rnorm
|
|
rnorm3d
|
|
rnorm4d
|
|
round
|
|
rsqrt
|
|
scalbln
|
|
scalbn
|
|
signbit
|
|
sin
|
|
sincos
|
|
sincospi
|
|
sinh
|
|
sinpi
|
|
sqrt
|
|
tan
|
|
tanh
|
|
tgamma
|
|
trunc
|
|
y0
|
|
y1
|
|
yn
|
|
__cosf
|
|
__exp10f
|
|
__expf
|
|
__fadd_rd
|
|
__fadd_rn
|
|
__fadd_ru
|
|
__fadd_rz
|
|
__fdiv_rd
|
|
__fdiv_rn
|
|
__fdiv_ru
|
|
__fdiv_rz
|
|
__fdividef
|
|
__fmaf_rd
|
|
__fmaf_rn
|
|
__fmaf_ru
|
|
__fmaf_rz
|
|
__fmul_rd
|
|
__fmul_rn
|
|
__fmul_ru
|
|
__fmul_rz
|
|
__frcp_rd
|
|
__frcp_rn
|
|
__frcp_ru
|
|
__frcp_rz
|
|
__frsqrt_rn
|
|
__fsqrt_rd
|
|
__fsqrt_rn
|
|
__fsqrt_ru
|
|
__fsqrt_rz
|
|
__fsub_rd
|
|
__fsub_rn
|
|
__fsub_ru
|
|
__log10f
|
|
__log2f
|
|
__logf
|
|
__powf
|
|
__saturatef
|
|
__sincosf
|
|
__sinf
|
|
__tanf
|
|
__dadd_rd
|
|
__dadd_rn
|
|
__dadd_ru
|
|
__dadd_rz
|
|
__ddiv_rd
|
|
__ddiv_rn
|
|
__ddiv_ru
|
|
__ddiv_rz
|
|
__dmul_rd
|
|
__dmul_rn
|
|
__dmul_ru
|
|
__dmul_rz
|
|
__drcp_rd
|
|
__drcp_rn
|
|
__drcp_ru
|
|
__drcp_rz
|
|
__dsqrt_rd
|
|
__dsqrt_rn
|
|
__dsqrt_ru
|
|
__dsqrt_rz
|
|
__dsub_rd
|
|
__dsub_rn
|
|
__dsub_ru
|
|
__dsub_rz
|
|
__fma_rd
|
|
__fma_rn
|
|
__fma_ru
|
|
__fma_rz
|
|
__brev
|
|
__brevll
|
|
__byte_perm
|
|
__clz
|
|
__clzll
|
|
__ffs
|
|
__ffsll
|
|
__hadd
|
|
__mul24
|
|
__mul64hi
|
|
__mulhi
|
|
__popc
|
|
__popcll
|
|
__rhadd
|
|
__sad
|
|
__uhadd
|
|
__umul24
|
|
__umul64hi
|
|
__umulhi
|
|
__urhadd
|
|
__usad
|
|
__double2float_rd
|
|
__double2float_rn
|
|
__double2float_ru
|
|
__double2float_rz
|
|
__double2hiint
|
|
__double2int_rd
|
|
__double2int_rn
|
|
__double2int_ru
|
|
__double2int_rz
|
|
__double2ll_rd
|
|
__double2ll_rn
|
|
__double2ll_ru
|
|
__double2ll_rz
|
|
__double2loint
|
|
__double2uint_rd
|
|
__double2uint_rn
|
|
__double2uint_ru
|
|
__double2uint_rz
|
|
__double2ull_rd
|
|
__double2ull_rn
|
|
__double2ull_ru
|
|
__double2ull_rz
|
|
__double_as_longlong
|
|
__float2half_rn
|
|
__half2float
|
|
__float2half_rn
|
|
__half2float
|
|
__float2int_rd
|
|
__float2int_rn
|
|
__float2int_ru
|
|
__float2int_rz
|
|
__float2ll_rd
|
|
__float2ll_rn
|
|
__float2ll_ru
|
|
__float2ll_rz
|
|
__float2uint_rd
|
|
__float2uint_rn
|
|
__float2uint_ru
|
|
__float2uint_rz
|
|
__float2ull_rd
|
|
__float2ull_rn
|
|
__float2ull_ru
|
|
__float2ull_rz
|
|
__float_as_int
|
|
__float_as_uint
|
|
__hiloint2double
|
|
__int2double_rn
|
|
__int2float_rd
|
|
__int2float_rn
|
|
__int2float_ru
|
|
__int2float_rz
|
|
__int_as_float
|
|
__ll2double_rd
|
|
__ll2double_rn
|
|
__ll2double_ru
|
|
__ll2double_rz
|
|
__ll2float_rd
|
|
__ll2float_rn
|
|
__ll2float_ru
|
|
__ll2float_rz
|
|
__longlong_as_double
|
|
__uint2double_rn
|
|
__uint2float_rd
|
|
__uint2float_rn
|
|
__uint2float_ru
|
|
__uint2float_rz
|
|
__uint_as_float
|
|
__ull2double_rd
|
|
__ull2double_rn
|
|
__ull2double_ru
|
|
__ull2double_rz
|
|
__ull2float_rd
|
|
__ull2float_rn
|
|
__ull2float_ru
|
|
__ull2float_rz
|
|
__heq
|
|
__hge
|
|
__hgt
|
|
__hisinf
|
|
__hisnan
|
|
__hle
|
|
__hlt
|
|
__hne
|
|
__hbeq2
|
|
__hbge2
|
|
__hbgt2
|
|
__hble2
|
|
__hblt2
|
|
__hbne2
|
|
__heq2
|
|
__hge2
|
|
__hgt2
|
|
__hisnan2
|
|
__hle2
|
|
__hlt2
|
|
__hne2
|
|
__float22half2_rn
|
|
__float2half
|
|
__float2half2_rn
|
|
__float2half_rd
|
|
__float2half_rn
|
|
__float2half_ru
|
|
__float2half_rz
|
|
__floats2half2_rn
|
|
__half22float2
|
|
__half2float
|
|
half2half2
|
|
__half2int_rd
|
|
__half2int_rn
|
|
__half2int_ru
|
|
__half2int_rz
|
|
__half2ll_rd
|
|
__half2ll_rn
|
|
__half2ll_ru
|
|
__half2ll_rz
|
|
__half2short_rd
|
|
__half2short_rn
|
|
__half2short_ru
|
|
__half2short_rz
|
|
__half2uint_rd
|
|
__half2uint_rn
|
|
__half2uint_ru
|
|
__half2uint_rz
|
|
__half2ull_rd
|
|
__half2ull_rn
|
|
__half2ull_ru
|
|
__half2ull_rz
|
|
__half2ushort_rd
|
|
__half2ushort_rn
|
|
__half2ushort_ru
|
|
__half2ushort_rz
|
|
__half_as_short
|
|
__half_as_ushort
|
|
__halves2half2
|
|
__high2float
|
|
__high2half
|
|
__high2half2
|
|
__highs2half2
|
|
__int2half_rd
|
|
__int2half_rn
|
|
__int2half_ru
|
|
__int2half_rz
|
|
__ll2half_rd
|
|
__ll2half_rn
|
|
__ll2half_ru
|
|
__ll2half_rz
|
|
__low2float
|
|
__low2half
|
|
__low2half2
|
|
__low2half2
|
|
__lowhigh2highlow
|
|
__lows2half2
|
|
__short2half_rd
|
|
__short2half_rn
|
|
__short2half_ru
|
|
__short2half_rz
|
|
__uint2half_rd
|
|
__uint2half_rn
|
|
__uint2half_ru
|
|
__uint2half_rz
|
|
__ull2half_rd
|
|
__ull2half_rn
|
|
__ull2half_ru
|
|
__ull2half_rz
|
|
__ushort2half_rd
|
|
__ushort2half_rn
|
|
__ushort2half_ru
|
|
__ushort2half_rz
|
|
__ushort_as_half
|
|
"""
|
|
# The dictionary is to place description of each device function. Expand it to all the device functions
|
|
deviceFuncDesc = {'acosf': "This function returns floating point of arc cosine from a floating point input"}
|
|
|
|
fnames = ["../../include/hip/amd_detail/math_functions.h","../../include/hip/amd_detail/device_functions.h","../../include/hip/amd_detail/hip_fp16.h"]
|
|
markdownFileName = "./hip-math-api.md"
|
|
|
|
preamble = "# HIP MATH APIs Documentation \n"+\
|
|
"HIP supports most of the device functions supported by CUDA. Way to find the unsupported one is to search for the function and check its description\n" + \
|
|
"Note: This document is not human generated. Any changes to this file will be discarded. Please make changes to Python3 script docs/markdown/device_md_gen.py\n\n" + \
|
|
"## For Developers \n" + \
|
|
"If you add or fixed a device function, make sure to add a signature of the function and definition later.\n" + \
|
|
"For example, if you want to add `__device__ float __dotf(float4, float4)`, which does a dot product on 4 float vector components \n" + \
|
|
"The way to add to the header is, \n" + \
|
|
"```cpp \n" + \
|
|
"__device__ static float __dotf(float4, float4); \n" + \
|
|
"/*Way down in the file....*/\n" + \
|
|
"__device__ static inline float __dotf(float4 x, float4 y) { \n" + \
|
|
" /*implementation*/\n}\n" + \
|
|
"```\n\n" + \
|
|
"This helps python script to add the device function newly declared into markdown documentation (as it looks at functions with `;` at the end and `__device__` at the beginning)\n\n" + \
|
|
"The next step would be to add Description to `deviceFuncDesc` dictionary in python script.\n" + \
|
|
"From the above example, it can be writtern as,\n`deviceFuncDesc['__dotf'] = 'This functions takes 2 4 component float vector and outputs dot product across them'`\n\n"
|
|
|
|
def generateSnippet(name, description, signature):
|
|
return "### " + name + "\n" + \
|
|
"```cpp \n" + signature + "\n```\n" + \
|
|
"**Description:** " + description + "\n\n\n"
|
|
|
|
def getName(line):
|
|
l1 = line.split('(')
|
|
l2 = l1[0].split(' ')
|
|
return l2[-1]
|
|
|
|
with open(markdownFileName, 'w') as mdfd:
|
|
mdfd.truncate()
|
|
mdfd.write(preamble)
|
|
for fname in fnames:
|
|
with open(fname) as fd:
|
|
lines = fd.readlines()
|
|
for line in lines:
|
|
if line.find('HIP_FAST_MATH') != -1:
|
|
break;
|
|
if line.find('__device__') != -1 and line.find(';') != -1 and line.find('hip') == -1:
|
|
name = getName(line)
|
|
if line.find('//') == -1:
|
|
if name in deviceFuncDesc:
|
|
mdfd.write(generateSnippet(name, deviceFuncDesc[name], line))
|
|
else:
|
|
mdfd.write(generateSnippet(name, "Supported", line))
|
|
else:
|
|
mdfd.write(generateSnippet(name, "**NOT Supported**", line))
|
|
fd.close()
|
|
mdfd.close()
|