RISC-V RVV extensions allow you to manipulate vectors in various ways. In this C program we set up three arrays: a, b and c. a and b contain the vectors we wish to add and c will receive the result.
We set the vector size we want to work with, then load the vectors a and b from memory in to the RISC-V vector registers. We then perform the addition and write the result bac to vector c and then print this answer to the terminal.
vecadd.c
#include <stdio.h> #include <riscv_vector.h> int main() { // Initialize two small vectors and a result vector int16_t a[] = {1, 2, 3, 4}; int16_t b[] = {5, 6, 7, 8}; int16_t c[4]; // Result vector // Set the vector length to the maximum supported // for 16-bit elements in m1 mode size_t vl = vsetvlmax_e16m1(); // Load vectors from memory vint16m1_t va = vle16_v_i16m1(a, vl); vint16m1_t vb = vle16_v_i16m1(b, vl); // Perform vector addition vint16m1_t vc = vadd_vv_i16m1(va, vb, vl); // Store the result back to the C array vse16_v_i16m1(c, vc, vl); // Print the results for(int i = 0; i < 4; i++) { printf("%d ", c[i]); } printf("\n"); return 0; }
Compile and Run
me@pioneer:gcc -o vecadd vecadd.c me@pioneer:./vecadd 6 8 10 12
Mission Accomplished
And there we have it, you have managed to do a vector addition of two 4 element arrays.