688 karma · joined August 6, 2014
riscv.org chisel.eecs.berkeley.edu https://github.com/ucb-bar/riscv-sodor https://github.com/ucb-bar/riscv-boom
With Teams, if you're already under the MS umbrella, it's an easy sell.
Unfortunately no, x86 is worse than RISC ISAs like ARMv8 and RISC-V in instruction density.
This can have a big effect on memory traffic due to unnecessary moves and stack pops/pushes.
I recall them saying it looked to give them roughly the same performance as state-of-the-art processors with ~30% less power; but that's a hard gamble for the $100Ms required to get to a product (especially if it requires a new ISA).
For example, the operands all stay in the same position, which prevents putting decode on the critical path before you can figure out which registers you need to read (which is doubly important for superscalar designs which need to compute the register dependence graph). Likewise, the sign-extend bit for immediates is always in the same place, providing relief for another potential critical path.
Is delaying the release by over a year and a half a win? I wonder how much in royalties/costs they're really saving.
At the end of the day, I don't care (or know) how it's implemented. What I can say is a) they aren't super fast, only ~1Mhz b) they take forever to compile down to, c) they have some, but not great visibility to what went wrong, and d) they cost a stupid amount of money.
If you can actually test on an FPGA (which is usually not possible, and if it is, it's not representative of the actual silicon/analog system you're building anyways), you can get 1T instructions in roughly ~6 hours at 50 MHz. But most hardware emulations are ~1 MHz, so now you're looking at weeks to hit 1T instructions (SPECint alone is 20T).
And what happens when you hit a bug, 2 weeks in? It may not be because you actually wrote new, buggy code, but because a new, higher performance branch predictor uncovered existing bugs. But you'll never know, because the FPGA historically gives you terrible visibility.
But in simulation (where testing is actually done), you're looking at ~1 Hz for a cpu core. Ouch. Obviously a better approach is required (unit-tests against models, formal, etc.), since at the level of detail you can't test much of anything.
Could you elaborate on what you do?
> Have you got any concrete ideas and proposals?
My recommendation is: try to build something complex, or take something from open-source that is very complex and extend it (test it, verify it, improve performance, etc.). Notice the problems you encounter, and then try to solve those problems.
I could give you a laundry list of pain points myself (why do I have to pay money for lint, and why does lint still suck???), but I think the best research is done by people trying to solve problem X, but along the way ended up having to solve Y and Z just to get to X.
https://en.wikipedia.org/wiki/Organic_field-effect_transisto...
Paper discussing characterizations and tradeoffs for designing processors for OTFTs:
What VC wants to spend their early money on lawsuits, even if you’ll (eventually) win?
However, there are many machines, which instead of using caches, use programmer-visible “scratchpads”. There are many reasons for this, but two big reasons are performance-predictability (real-time systems) or to avoid the hw complexity of cache management.
In general though, scratchpads are hugely painful to program for and terrible for code portability.
Dwarf Fortress was literally an exhibit in MOMA; it can look downright beautiful, despite being nothing but ASCII letters in different shades of colors:
https://www.moma.org/media/W1siZiIsIjI1NTc0MSJdLFsicCIsImNvb...
Last I looked into this, AIUI, the default in the US is "everything the employee does the employee owns" (damn you wedding photographers!).
So naturally, virtually every tech company contract will have a "work for hire" clause which says "never mind that, everything the employee does the company owns (on or off the clock, in the shower, whatever, it's all ours)".
California adds an extra exception, which is "whatever the employee does (on their own time and equipment) that is 'unrelated to the company's business' is still the employee's." While that may safeguard my oil painting hobby, I'd always be nervous about any programming (game or otherwise) if I work for a tech company...
If a uop throws an exception (let's say a fused add+ld), each uop can have a tag that helps you backtrace to its PC (instruction address) of let's say the start of the sequence, so you know what to inform the Privileged Architecture as to what "instruction" excepted. For many reasons, you need to store a list of PCs of the inflight instructions somewhere (although it is heavily compressed), so having a small ID tag to help reconstruct a given uop's PC isn't too onerous.
Ideally, multiple instructions may map to a single uop, but either none (or up to one) can throw an exception. The hard one here is something like load-pair uops; since each load can throw an exception. Some machines, if a fault is encountered, will refetch the pair and re-execute as independent/unfused loads. Other designs will just pay the pain of tracking which of the pair excepted and do some simple arithmetic off of that.
The problem is "vector" is an entire category of architecture-style and machine designs; it's not a problem domain. So some people want vector for their very narrow domain (ML? IOT?), and other people want vector for some other narrow domain (HPC? media?), and other people want it for "general-purpose" compute (whatever that means).
Hard questions: what data types do you support? Do you support mixed-types? Do you support expanding operations (64x64=128?)? Do you support reductions? How do you support conditional/branching execution? How do you support interrupts/exceptions? Do you support register file reconfigurations? How do you do function calls? Context switches?
Looking at the evolution of Intel's SIMD ISAs, they started from small 64-bit integer-only multimedia stuff (MMX), and are now at AVX's 512b masked execution with scatter/gatters and exponentials and reciprocals... there's a lot of complexity you can add to a vector ISA. :0