毕昇编译器向量化方法
使用毕昇编译器时在链接选项中同时加上-lksvml -fveclib=MATHLIB -lkm -lm,并添加-O3或-O2选项以提供向量接口。其中-O3/-O2是为了开启向量化优化,这是向量化数学库起效的前提。
示例
test.c:
#include <km.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
long loop = 1e7;
int len = 8192;
float *a = (float*)malloc(sizeof(float) * len);
float *b = (float*)malloc(sizeof(float) * len);
float *d = (float*)malloc(sizeof(float) * len);
for (int i = 0; i < len; i++) {
a[i] = rand() * 7.7680f - 6.3840f;
b[i] = rand() * 8.7680f - 6.3840f;
d[i] = 0;
}
for (int i = 0; i < loop; i++) {
for (int j = 0; j < len; j++) {
d[j] = expf(a[j]);
}
}
return 1;
}
编译指令:
clang test.c -lksvml -fveclib=MATHLIB -lkm -lm -O3
使用nm命令查看调用接口:
nm -D a.out

出现_ZGVnN4v_前缀接口表示调用成功。
父主题: 编译器自动向量化