c语言中调用sve函数的例子
c语言中调用sve函数 (Arm C Language Extensions for SVE)PDF
sve 指令集
sve.c
#include <arm_sve.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #define ARRAYSIZE 102800000 int a[ARRAYSIZE]; int b[ARRAYSIZE]; int c[ARRAYSIZE]; int main() { srand((unsigned)time(NULL)); for (int i = 0; i < ARRAYSIZE; i++) { // Generate a random number between 200 and 300 a[i] = (rand() % 100) + 200; // Generate a random number between 0 and 100 b[i] = rand() % 100; } int cnt = 0; clock_t start, finish; double Total_time; printf("\n"); start = clock(); svbool_t pred = svptrue_b32(); for (uint64_t i = 0; i < ARRAYSIZE; i += svcntw(), ++cnt) { svint32_t sva = svld1(pred, a + i); svint32_t svb = svld1(pred, b + i); svint32_t svc = svadd_s32_z(pred, sva, svb); svst1(pred, c + i, svc); } finish = clock(); Total_time = (double)(finish - start) / CLOCKS_PER_SEC; //单位换算成秒 // printf("i \ta[i] \tb[i] \tc[i] \n"); // printf("=============================\n"); // for (int i = 0; i < ARRAYSIZE; i++) // { // printf("%d \t%d \t%d \t%d\n", i, a[i], b[i], c[i]); // } printf("%f seconds\n", Total_time); // printf("svcntw() = %lu \t cnt = %d\n", svcntw(), cnt); return 0; }
编译 gcc -O3 -march=armv8-a+sve -o sve sve.c
以长度为128的向量矢量寄存器运算
$ time armie -msve-vector-bits=128 ./sve 4.516719 seconds real 0m4.586s user 0m4.473s sys 0m0.110s
以长度为2048的向量矢量寄存器运算
$ time armie -msve-vector-bits=2048 ./sve 0.598751 seconds real 0m0.664s user 0m0.568s sys 0m0.093s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具