MUSA Compiler API 完整参考手册
目录
- 标准 C 库函数
- 双精度浮点运算(带舍入控制)
- 单精度浮点运算(带舍入控制)
- 类型转换函数
- 数学函数
- 位操作函数
- SIMD 向量操作
- 同步与线程束操作
- 原子操作
- 半精度与 BFloat16 操作
- 内存访问优化
- 纹理与表面访问
- 向量类型构造函数
- 其他内建函数
1. 标准 C 库函数
__assert_fail
- 原型:
void __assert_fail(const char* expr, const char* file, unsigned int line, const char* func) - 域: 主机端(glibc 内部)
- 说明: 断言失败时由运行时调用,输出错误信息并终止程序
- 注意: 通常使用
assert()宏而非直接调用
clock
- 原型:
clock_t clock(void) - 域: 主机端 / 设备端
- 说明:
- 主机端:返回进程 CPU 时间
- 设备端:返回 SM 硬件周期计数
- 相关:
clock64()- 64位版本(设备端)
内存管理函数
- malloc:
void* malloc(size_t size)- 主机堆内存分配 - free:
void free(void* ptr)- 释放内存 - memcpy:
void* memcpy(void* dst, const void* src, size_t n)- 内存拷贝 - memset:
void* memset(void* s, int c, size_t n)- 内存初始化
printf
- 原型:
int printf(const char* fmt, ...) - 域: 主机端 / 设备端
- 说明: 格式化输出。设备端输出在内核结束后刷新
- 注意: 设备端使用影响性能,仅用于调试
2. 双精度浮点运算(带舍入控制)
舍入模式后缀:
rn: round to nearest even (就近取偶)rz: round toward zero (向零)ru: round toward +∞ (向上)rd: round toward -∞ (向下)
加法
double __dadd_rn(double a, double b)double __dadd_rz(double a, double b)double __dadd_ru(double a, double b)double __dadd_rd(double a, double b)
减法
double __dsub_rn(double a, double b)double __dsub_rz(double a, double b)double __dsub_ru(double a, double b)double __dsub_rd(double a, double b)
乘法
double __dmul_rn(double a, double b)double __dmul_rz(double a, double b)double __dmul_ru(double a, double b)double __dmul_rd(double a, double b)
除法
double __ddiv_rn(double a, double b)double __ddiv_rz(double a, double b)double __ddiv_ru(double a, double b)double __ddiv_rd(double a, double b)
融合乘加 (FMA)
double __fma_rn(double a, double b, double c)- 计算 a×b+cdouble __fma_rz(double a, double b, double c)double __fma_ru(double a, double b, double c)double __fma_rd(double a, double b, double c)
平方根
double __dsqrt_rn(double x)- 默认舍入double __dsqrt_ru(double x)double __dsqrt_rd(double x)double __dsqrt_rz(double x)
3. 单精度浮点运算(带舍入控制)
加法
float __fadd_rn(float a, float b)float __fadd_rz(float a, float b)float __fadd_ru(float a, float b)float __fadd_rd(float a, float b)
减法
float __fsub_rn(float a, float b)float __fsub_rz(float a, float b)float __fsub_ru(float a, float b)float __fsub_rd(float a, float b)
乘法
float __fmul_rn(float a, float b)float __fmul_rz(float a, float b)float __fmul_ru(float a, float b)float __fmul_rd(float a, float b)
除法
float __fdiv_rn(float a, float b)float __fdiv_rz(float a, float b)float __fdiv_ru(float a, float b)float __fdiv_rd(float a, float b)float __fdividef(float a, float b)- 快速近似除法
融合乘加
float __fmaf_rn(float a, float b, float c)float __fmaf_rz(float a, float b, float c)float __fmaf_ru(float a, float b, float c)float __fmaf_rd(float a, float b, float c)
平方根
float __fsqrt_rn(float x)float __fsqrt_rz(float x)float __fsqrt_ru(float x)float __fsqrt_rd(float x)
倒数与倒数平方根
float __frcp_rn(float x)- 倒数float __frcp_ru(float x)float __frsqrt_rn(float x)- 倒数平方根
4. 类型转换函数
Double to Float
float __double2float_rn(double x)float __double2float_rz(double x)float __double2float_ru(double x)float __double2float_rd(double x)
Double to Integer
int __double2int_rn(double x)int __double2int_rz(double x)int __double2int_ru(double x)int __double2int_rd(double x)
Double to Long Long
long long __double2ll_rn(double x)long long __double2ll_rz(double x)long long __double2ll_ru(double x)long long __double2ll_rd(double x)
Double to Unsigned
unsigned int __double2uint_rn(double x)unsigned int __double2uint_rz(double x)unsigned int __double2uint_ru(double x)unsigned int __double2uint_rd(double x)
Float to Integer
int __float2int_rn(float x)int __float2int_rz(float x)int __float2int_ru(float x)int __float2int_rd(float x)
Integer/Long to Float/Double
float __int2float_rn(int x)double __int2double_rn(int x)float __ll2float_rn(long long x)double __ll2double_rn(long long x)
位重解释
int __float_as_int(float x)float __int_as_float(int x)long long __double_as_longlong(double x)double __longlong_as_double(long long x)
Double 分解与组合
int __double2hiint(double x)- 获取高32位int __double2loint(double x)- 获取低32位double __hiloint2double(int hi, int lo)- 从高低32位组合