Deutsch English Français Italiano |
<vaqgtl$3526$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.nobody.at!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: BGB <cr88192@gmail.com> Newsgroups: comp.arch Subject: Re: Computer architects leaving Intel... Date: Thu, 29 Aug 2024 14:07:29 -0500 Organization: A noiseless patient Spider Lines: 254 Message-ID: <vaqgtl$3526$1@dont-email.me> References: <vajo7i$2s028$1@dont-email.me> <memo.20240827205925.19028i@jgd.cix.co.uk> <valki8$35fk2$1@dont-email.me> <2644ef96e12b369c5fce9231bfc8030d@www.novabbs.org> <vam5qo$3bb7o$1@dont-email.me> <2f1a154a34f72709b0a23ac8e750b02b@www.novabbs.org> <vaoqcf$3r1u3$1@dont-email.me> <2366e332022b8bc8bf2cae9dae663eeb@www.novabbs.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Thu, 29 Aug 2024 21:07:33 +0200 (CEST) Injection-Info: dont-email.me; posting-host="bf722ae835a3405e0686f423969f1f06"; logging-data="103494"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/24rTRI9M153fQB6rsVKWU9hNgQmUBIZk=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:D2+E7vCGzjeR4DAER13A7nPg0j0= In-Reply-To: <2366e332022b8bc8bf2cae9dae663eeb@www.novabbs.org> Content-Language: en-US Bytes: 9823 On 8/29/2024 11:23 AM, MitchAlsup1 wrote: > On Thu, 29 Aug 2024 3:36:44 +0000, BGB wrote: > >> On 8/28/2024 11:40 AM, MitchAlsup1 wrote: >>> On Wed, 28 Aug 2024 3:33:40 +0000, BGB wrote: >>>> >>> And what kind of code compatibility would you have between different >>> designs... >>> >> >> If people can agree as to the encodings, then implementations are more >> free to pick which extensions they want or don't want. >> >> If the encodings conflict with each other, no such free choice is >> possible. > > With differing instructions, how does a software vendor write software > such that it can run near optimally on any implementation ?? > They presumably target whatever is common, or the least common denominator (such as RV64G or RV64GC), and settle with "probably good enough"... But, probably not too much different from other ISAs, just with a lot more parties involved. The alternative is that one expects that all the software be rebuilt for the specific configuration being used, or recompiled from source or some other distribution format on the local machine which it is to be run (with binaries distributed as some form of "portable IR"). Though, the latter is hindered to some extent by lack of a "good" portable IR: 1, Non proprietary; 2, Sensible design; 3, Works acceptable for various languages; 4, Works well for C and C++; ... But, sadly, there is no really "good" option. CIL / MSIL (.NET): Fails on 1 and 4; WASM: Fails on 2; ... While C can be compiled to .NET, it fails to pass a reasonable definition of "good" (and the generated binaries tend to fail on non-MS implementations, such as Mono). Elsewhere, the "accepted" solution is that people release the source, and a "./configure" script or similar will figure it out. Though, sadly, the situation with getting non-trivial programs built for my stuff is a bit more involved than passing a "--target" option to configure. But, this is part of why I am still messing with RISC-V Mode: Theoretically, if I can get the RISC-V stuff working better, and various common Linux libraries ported, it should get easier. Though, while one can get it to target "riscv64-unknown-linux-gnu", not really an obvious way to convince "configure" that it needs to use "-fPIC" and "-fPIE" for *everything* that gets built (rather than just for shared objects). Also sorta annoying that RV64 binaries need to reload a full copy of the ELF for every program instance. If not for these issues (and the 'C' extension), could almost try to rip userland binaries from the RISC-V Ubuntu build. Or, maybe start trying to working towards a direction where I "can" just start ripping binaries off of Ubuntu or similar (and running them on top of TestKern, sorta like WSL). Major steps needed for this: Implement support for Linux syscalls; Would allow binaries to use GLIBC; Implement support for separate per-process address spaces; Would eliminate the need for mandatory "-fPIE"; Implement 'C' extension; Would allow directly ripping existing userland binaries. ... Though, does raise the question of the point of having a custom ISA if it is only being used by the kernel and maybe a few programs. But, potentially, still more useful than not having any real userland. >>>> Prolog/Epilog happens once per function, and often may be skipped for >>>> small leaf functions, so seems like a lower priority. More so, if one >>>> lacks a good way to optimize it much beyond the sequence of load/store >>>> ops which is would be replacing (and maybe not a way to do it much >>>> faster than however can be moved in a single clock cycle with the >>>> available register ports). >>> >>> My 1-wide machines does ENTER and EXIT at 4 registers per cycle. >>> Try doing 4 LDs or 4 STs per cycle on a 1-wide machine. >> >> >> It likely isn't going to happen because a 1-wide machine isn't going to >> have the needed register ports. > > 3R1W most of the time converts to 4R or 4W for the *logues. > Having a register port "change direction" seems like an issue. Only real way I can imagine this happening is if one has "inout" ports or similar, but, ... the tools don't like this. For things like bidirectional pins, I usually needed to split them internally into: pins_i, pins_o, pins_d Or, in/out/direction. With logic in the toplevel like: inout[15:0] pins; assign pins[0] = pins_d[0] ? pins_o[0] : 1'bZ; assign pins[1] = ... ... assign pins_i[0] = pins_d[0] ? 1'b1 : pins[0]; ... Trying to do this in internal modules generally resulting in synthesis warnings, or Verilator rejecting it entirely. As far as logic goes, such a register file may as well be 4R1W. For 2 wide profiles, I had used a 4R2W design. This mostly works, but disallows a few semi-common cases, and (sadly) with WEX there isn't a way to make code that runs on both at the same time and gives best-case performance. It is now almost tempting to give in and go over to superscalar (well, since I already did it and it seems to work OK for RV mode). >> But, if one doesn't have the register ports, there is likely no viable >> way to move 4 registers/cycle to/from memory (and it wouldn't make sense >> for the register file to have a path to memory that is wider than what >> the pipeline has). > --------------- >>>> This is likely the fate of nearly every hobby class ISA. >>>> >>> Time to up your game to an industrial quality ISA. >> >> Open question of what an "industrial quality" ISA has that BJX2 lacks... >> Limiting the scope to things that RISC-V and ARM have. > > Proper handling of exceptions (ignoring them is not proper) If you mean FPU exceptions, maybe. As far as general interrupt handling, mechanism isn't too far off from what SH-4 had used, and apparently also RISC-V's CLINT and MIPS work in a similar way. Though, with differences as to how they divide up exceptions. In my case: Reset; General Fault; External Interrupt; TLB/MMU; ========== REMAINDER OF ARTICLE TRUNCATED ==========