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
posted @   zkx98  阅读(723)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示