Metal标准库包括:通用函数、整型函数、关系函数、数学函数、矩阵运算、SIMD运算、几何函数、纹理函数等。接下来让我们走进Metal标准库的世界。
1、通用函数
通用函数在<metal_common>头文件中,T为scalar或vector的浮点类型。如下表所示:
通用函数 | 描述 |
T clamp(T x, T minval, T maxval) | 限制x取值范围在minval与maxval之间 |
T mix(T x, T y, T a) | 纹理混合 |
T saturate(T x) | 限制数值在[0.0, 1.0] |
T sign(T x) | 符号函数,x>0返回1.0,x<0返回-1.0 |
T smoothstep(T edge0, T edge1, T x) | x<=edge0返回0.0,x>=edge1返回1.0 |
T step(T edge, T x) | x<edge返回0.0,否则返回1.0 |
2、整型函数
整型函数在<metal_integer>头文件中,主要是位操作相关,如下表所示:
整型函数 | 描述 |
T abs(T x) | 求绝对值 |
T clz(T x) | 头部为0bit的个数 |
T ctz(T x) | 尾部为0bit的个数 |
T hadd(T x, T y) | 两者之和的一半 |
T max(T x, T y) | 两者较大值 |
T min(T x, T y) | 两者较小值 |
T popcount(T x) | 非0位的个数 |
T reverse_bits(T x) | 高低位反转 |
3、关系函数
关系函数在<metal_relational>头文件中,T为scalar或vector的浮点类型,Ti为整型,Tb为布尔类型。如下表所示:
4、数学函数
数学函数在<metal_math>头文件中, 如下表所示:
数学函数 | 描述 |
T cos(T x) | 余弦函数 |
T sin(T x) | 正弦函数 |
T ceil(T x) | 向上取整 |
T floor(T x) | 向下取整 |
T divide(T x, T y) | 除法运算 |
T exp(T x) | 指数运算 |
T fract(T x) | 取小数部分 |
T log(T x) | 对数运算 |
5、矩阵运算
矩阵运算在<metal_matrix>头文件中,T为float或half浮点类型,如下表所示:
矩阵函数 | 描述 |
float determinant(floatnxn) | 求行列式 |
floatmxn transpose(floatnxm) | 矩阵转置 |
6、SIMD运算
SIMD是单指令多数据的简称,操作寄存器并行运算,提高运算效率。SIMD组的矩阵运算定义在<metal_simdgroup_matrix>中,包括内存加载、存储,如下表所示:
7、 几何函数
几何函数定义在<metal_geometric>头文件中。T为vector浮点类型,Ts为scalar类型。如下表所示:
8、纹理函数
纹理函数定义在<metal_texture>头文件中, 支持1D纹理,2D纹理,3D纹理,如下表所示:
纹理函数 | 描述 |
atomic_load | 加载纹理 |
atomic_store | 存储纹理 |
atomic_exchange | 交互纹理 |
atomic_min | 比较纹理较大值 |
atomic_max | 比较纹理较小值 |