[HN Gopher] Parsing RISC-V assembly ___________________________________________________________________ Parsing RISC-V assembly Author : azhenley Score : 31 points Date : 2020-10-26 20:13 UTC (2 hours ago) (HTM) web link (web.eecs.utk.edu) (TXT) w3m dump (web.eecs.utk.edu) | jeff-davis wrote: | If we move away from general-purpose computing toward a mix of | specialized processors, will there be a whole set of standardized | RISC-V extensions for GPU, ML, etc.? Or is RISC-V going to mainly | stick to general-purpose code? | | If there are a ton of extensions, will we need to compile all | code for a particular machine so that it generates the right code | for that machine's mix of special-purpose chips? What will that | mean for virtualization and/or containerization? | pavehawk2007 wrote: | To my knowledge, and looking at http://riscv.org, this is | supposed to be an open-ISA (instruction set architecture). | Their specification allows chip manufacturers to write their | own extensions using the "custom" opcodes. | | The Kendryte K210 is a RISC-V-compliant CPU. It has off-core | components, such as what they're calling a KPU The ML and GPU | cores are controlled via I/O, not by the CPU directly. These | are called platform-level components. In general, this uses | MMIO with a hard-wired memory address to control. You can see | the KPU (their ML accelerator) here: https://s3.cn- | north-1.amazonaws.com.cn/dl.kendryte.com/docum... | | See section 3.2. | | I think the extensions are meant to be modular. Right now, not | many embedded devices allow for the H mode, and hypervisor-ing | is still in development. Currently, I know of Machine mode, | Supervisor mode, and User mode, but since the change from 2018 | to 2019, they have really started to ramp up the virtualization | ISA support. | narrationbox wrote: | The SDKs for the non big name (Nvidia, Google, AMD) | accelerators have very poor developer experiences. (Granted | CUDA/ROCm isn't much better) A number of the embedded SDKs | require you to use their custom framework and won't support | Tensorflow/Torch models out of the box. Onnx and similar | conversion frameworks target only the big name chips, not off | the shelf generic AI accelerator chips. Embedded systems need | more software engineering. | jeff-davis wrote: | So RISC-V is open, but the extensions are often proprietary? | | And what does virtualization even _mean_ when extensions | proliferate? Will you need a distinct physical machine for | each combination of extensions that someone might want to | virtualize? | pavehawk2007 wrote: | Properitary = custom...it just means that it's particular | to a single chip manufacturer. They have set aside opcode | space for doing just that. RISC-V can't forecast everything | someone will want to do with a RISC-V chip. Instead, they | promise not to use those opcodes so that it won't conflict | with a chip manufacturer's "custom" instructions. | | Here's a post from SiFive talking specifically about DSAs | in RISC-V: https://www.sifive.com/blog/part-1-fast-access- | to-accelerato... | | In terms of virtualization, most of the extensions can be | emulated. This happens a lot with the hodgepodge of | extensions laid on Intel/AMD, such as SSE, SSSE, AVX, and | so forth. Just because the underlying physical machine | doesn't necessarily support it doesn't mean that the guest | can't. At the operating system level, the OS can read the | misa (Machine ISA) register to see which extensions are | supported, and emulate those which are not. I don't think | RISC-V solves the issues that virtualizing Intel/AMD also | suffer--and I don't think that's really their goal. | | In terms of the host, if there is an extension that cannot | be emulated, then yes, I would think you'd need the | physical machine to be able to support it. | thethirdone wrote: | This works for the basics of RISC-V assembly, but fails for a lot | of assembly code that GCC accepts. It should be fine for most | human written code, but machine generated code is also common. | | Most notably, labels starting with a period are not accepted, but | gcc generated assembly has tons of labels like that. | [deleted] | [deleted] | azhenley wrote: | Thanks! That should be an easy fix. The documentation is | _terrible_. | | What else did I miss? | thethirdone wrote: | > Unfortunately, the documentation on legal syntax is | absolutely terrible. | | I totally agree. Determining the semantics of wierd assembly | is even harder. At least for syntax you can just see confirm | if gnu-as accepts it. | | > Did I miss anything else? | | I haven't looked into what is actually parsing at all, but it | correctly accepts things like %hi, strings delimited by | quotes, @function, labels that are just numbers. I had | expected some of those to be rejects based on the post. | | I don't know what else might fail because I can't try any | auto generated code because of the period label issue. I | would recommend trying the assembly generated by compiling | this project; it shows a bunch of weird pieces of syntax. ___________________________________________________________________ (page generated 2020-10-26 23:00 UTC)