如何在 RISC-V 汇编中使用向量运算
Posted
技术标签:
【中文标题】如何在 RISC-V 汇编中使用向量运算【英文标题】:How to use vector operations in RISC-V Assembly 【发布时间】:2019-02-01 11:04:00 【问题描述】:我正在尝试利用 RISC-V 汇编中的向量操作,特别是我需要使用 arch RV64iV 或 RV64GV 编译我的源代码。 我正在使用 riscv64-unknown-elf- 工具链,具有以下参数:
riscv64-unknown-elf-gcc -o test -march=rv32iv test.s
但我收到以下错误:
汇编程序消息: 致命错误:-march=rv32iv:不支持的 ISA 子集 `v'
谢谢
【问题讨论】:
尝试更新您的工具链。 This post about RISC-V Vector Extensions from 2018 年 9 月表示 “目前还没有使用 GCC 进行实施工作或实验”。 @Michael:但这是否意味着没有自动矢量化或内在函数可以让 GCC 发出指令? GNU Binutils 是一个单独的项目,即使 gcc 从不发出它们,也可以实现 asm 指令。 (.s 上的gcc
只是将 asm 文件从 binutils 提供给 as
。-march
选项通常在仅组装而不是编译时毫无意义,但在 ARM 上对于拇指与 ARM 可能很重要......可能不是RISC-V)
@PeterCordes:不知道。那是我能找到的信息。我最近没有自己构建 binutils,所以我没有任何最近的源代码分发。
我的评论在 OP 中得到了部分解决:他们应该尝试riscv64-unknown-elf-gcc test.s
并查看汇编程序说什么,而不是错误地输出 GCC 前端。
【参考方案1】:
截至 2019 年 2 月,没有标准的 RISC-V 矢量扩展,这意味着标准 RISC-V 工具链不支持。有各种各样的矢量扩展草案,但没有软件支持。
【讨论】:
【参考方案2】:截至 2020 年初,RISC-V 矢量扩展“V”规范为 0.8 版,仍处于草案状态。
但是,有可用的 GNU gcc/binutils 的“V”端口,并且 Spike RISC-V 模拟器也支持“V”0.8。 README of the "V" spec links to the relevant branches。
我最近发表了 some notes 关于如何开始 RISC-V "V" 0.8 开发的文章,例如如何构建正确的工具链、相关组件、组装、编译“V”代码以及如何使用 Spike 对其进行测试。
【讨论】:
以上是关于如何在 RISC-V 汇编中使用向量运算的主要内容,如果未能解决你的问题,请参考以下文章