RISC-V Vector 或 SIMD 类似拓展的应用举例子说明

线性代数部分 专有名词: 线性方程组 齐次线性方程组 增广矩阵 还没有想好次级标题叫什么名字 不知道有没有必要从线性方程的求解开始讲起,简单带过一下好了。想象有很多未知数,如果没有限制条件,未知数的结果就想怎么编就怎么编,但是如果用方程组来当它们的限制条件,就可以缩小范围。用线性代数的方法求解就是,把未知数的位置对齐,将系数收集起来,称之为系数矩阵,对系数矩阵进行行变换化简,得到线性无关行向量个数,也就是矩阵的秩。秩小于未知数个数时,相当于限制条件没有太多,可以在一定范围内瞎编。而秩等于未知数个数时,想方便理解的话就还原一下原本的方程,如果是齐次线性方程,最后一行的未知数 x 常数之后还是等于0, 只能未知数自己也是0。以前学的教材上还有增广矩阵这个概念用来求等式右边不为0的情况,但是规律公式啥的都很难记,还是行变换之后想象一下原本的方程简单。 电路部分(线性齐次) 专有名词: 基尔霍夫电流定律 基尔霍夫电压定律 节点分析 举个例子: 本来是想拿个电路图举例子的,但是发现博客没调好,显示不了图片。等下一次心血来潮的时候修一修吧。 大致过程就是,选一个参考节点,把所有节点标个号方便表示,给每一条支路都标个方向。找出受控源,列出支路方程,受控源正负极相连的方向如果跟你标的方向相同就写负号,相反就写正号。列出节点电压方程。改写成矩阵形式。就变成了一个方程组解的问题。 电路部分(线性非齐次) 要写的也太多了。。。再说吧。 专有名词: 举个例子: 关于射频仿真软件 之前在电子厂干天线的测试和量产前期的失效分析,因为看不到什么前途就在闲的时候看了一些天线仿真教学,但是也没太深入学习就跑路了,机缘巧合之下转行搞计算机。在开始学仿真的时候,学习到的就是不同的电尺寸选择的算法会不一样,还接触到了边界条件这些很有意思的概念。在学习RISCV相关的知识的时候,经常看到的例子就是计算RGB, 但是脑子里好像又有一些矩阵的其他用法,心血来潮,写下这篇博客,如果以后能学习到更多,那本文就是挖的坑,有空就来填,如果以后真的转行成功,在其他方向深入,那本文就是对过去的总结。

xyenchi

RVV intrinsic的实现分析

虽然标题叫分析,但现在已经变成了大量注释内容整合的形状,可能得改名为笔记。 既然我第一行就写明了,那么便不是标题党。 之所以不能叫分析,当然是自己回头看一遍都没看懂在写啥。 包含的文件 iterator.md constraint.md riscv-c.cc riscv-protos.h riscv-vector-builtins-bases.cc riscv-vector-builtins-bases.h riscv-vector-builtins-functions.def riscv-vector-builtins-shapes.cc riscv-vector-builtins-shapes.h riscv-vector-builtins-types.def riscv-vector-builtins.cc riscv-vector-builtins.h riscv.md vector-iterators.md vector.md Acronyms QI: 8 bits HI: 16 bits SI: 32 bits DI: 64 bits 把一个word(即 32 bit 当成计量单位)四分之一(quarter)、二分之一(half)、双倍(double)。 iterator.md 使用lisp声明通用寄存器位宽定义迭代器(iterator)名称 constraint.md 在 match_operand 中,可以指定操作数约束(operand constraint)。 约束(constraint)对断言(predicate)所允许的操作数进行更详细的描述。 约束条件可以定义操作数是否可以使用寄存器以及使用何种寄存器。 说明操作数是否可以是一个内存引用以及其地址类型。 描述该操作数是都可以是一个立即数常量(immediate)以及其可能的值。 GCC 中的约束(constraint)使用字符串(string)表示。 以下是常见用法(部分夹带RISC-V私货方便自己查询): >: memory operand, autoincrement addressing type, including preincrement and postincrement. f: floating-point register g: general register, memory or integer immediate constant. i: Integer immediate operand, sign constant when and after compilering. j: SIBCALL_REGS l: JALR_REGS n: known value integer immediate operand p: memory address operand x: all operand I: 12-bit integer signed immediate J: integer zero K: 5-bit unsigned immediate for CSR access instructions L: U-type 20-bit signed immediate Ds3: 1, 2 or 3 immediate DsS: 31 immediate DsD: 63 immediate DbS: DnS: D03: 0, 1, 2 or 3 immediate DsA: 0 - 10 immediate G: A: An address that is held in a general-purpose register. S: A constraint that matches an absolute symbolic address. U: A PLT-indirect call address. T: vr: vector register vd: vector register except mask register vm: vector mask register vp: poly int vu: undefined vector value vi: vector 5-bit signed immediate vj: vector negated 5-bit signed immediate vk: vector 5-bit unsigned immediate Wc0: vector of immediate all zeros Wc1: vector of immediate all ones Wb1: BOOL vector of {…,0,…0,1} Wdm: Vector duplicate memory operand th_f_fmv: floating-point register for XTheadFmv th_r_fmv: integer register for XTheadFmv vmWc1: vector mask register + a vector of immediate all ones rK: register operand using general register + 5-bit unsigned immediate for CSR access instructiosn 约束修饰字符 (Constraint Modifier Characters) =:操作数只写 +:操作可读可写 &:在某些约束选择(constraint alternative)中,该操作数是前面某个clobber的操作数,作为指令的输入操作数,该操作数在指令结束之前它的值已经被修改,因此,该操作数可能不在原来使用的寄存器或内存地址中存储 %:可交换,该操作数及其之后的操作数可以进行交换 eg. 操作数1的约束为 ‘%0’,表示与操作数0的约束相同。 #:直到逗号的所有字符在进行约束处理时将被忽略,这些字符只对寄存器选择起作用 *: 直到逗号的所有字符在进行约束处理是将被忽略,这些字符在寄存器选择是也将被忽略。 riscv-c.cc riscv intrinsic 相关。 ...

xyenchi