| Deutsch English Français Italiano |
|
<6cb409f07cf0f109d91ea8bb072efd36@www.novabbs.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: news.eternal-september.org!eternal-september.org!feeder3.eternal-september.org!news.quux.org!news.nk.ca!rocksolid2!i2pn2.org!.POSTED!not-for-mail From: quadibloc <quadibloc@gmail.com> Newsgroups: comp.arch Subject: Re: Why I've Dropped In Date: Mon, 16 Jun 2025 03:46:51 +0000 Organization: novaBBS Message-ID: <6cb409f07cf0f109d91ea8bb072efd36@www.novabbs.com> References: <0c857b8347f07f3a0ca61c403d0a8711@www.novabbs.com> <dd6e28b90190e249289add75780b204a@www.novabbs.com> <ec821d1d64555055271e3b72f241d39b@www.novabbs.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: i2pn2.org; logging-data="691003"; mail-complaints-to="usenet@i2pn2.org"; posting-account="GSAUMsvIs05PgSAevbIzdWiOy1BcuThtiv166p5NnMk"; User-Agent: Rocksolid Light X-Rslight-Site: $2y$10$tvekW7DGV31SI8ZyGCRVO./L8rokPJxq45HOcX/2ezDNQS.mJrYyi X-Rslight-Posting-User: 7260c650ae4d5ba82d3b6b1eab0ac1b8653ff052 X-Spam-Checker-Version: SpamAssassin 4.0.0 Given that Concertina II poses obvious difficulties, it seems reasonable to try to explain why it is the way it is. The fundamental characteristic of Concertina II that is the most controversial is how programs are organized around 256-bit blocks of program code. So I think that this is what I need to explain and attempt to justify. Perhaps the most obvious apparent reason for block structure is to allow VLIW functionality. Although VLIW doesn't seem to have been a success in the market, the rationale behind it is the same as that of the promising Mill design: control pipelining without having to cope with the complexity of out-of-order execution. The Concertina II block structure lets VLIW functionality be optional, so that one ISA can serve processors of different sizes, designed forf different speeds; for some, the cost of OoO makes sense, and VLIW doesn't, but this allows the others to be addressed as well. Switching between modes to allow the same bit patterns to be interpreted as instructions belonging to different sets of instructions is considered to be a security hazard. The block structure allows the instruction set to be extended without that danger - one part of a block may affect how the rest of the block is interpreted, but that's still a static attribute of the code that can't be changed by branching to it from elsewhere with special bits set. It's been noted that having immediate values in instructions is a very useful way of making values available to programs as a natural result of program fetch, without having to do other memory accesses, which tend to be slow. It was Mitch Alsup himself who noted the importance of this feature. But because variables come in many types and sizes, I found it hard to fit immediates of all available data types into an ISA where variable-length instructions are indicated in a very simple manner. My scheme of reserving part of a block as unused, and pointing to values in that unused part of the block makes access more direct than the heads and tails system, and avoids changing the length of the instruction entirely. So these are the reasons I've stuck with block structure. There might be schemes to avoid block structure and yet meet any one of these goals, but trying to meet all four and not have block structure seems to me to be likely to cause a much more complicated instruction set even than what I have. Also, there are workarounds. If one wishes to generate code that ran on a Concertina II implementation, but couldn't cope with managing a division into blocks... then just use the plain 32-bit instruction set without using immediates. One will have a complete instruction set that already does more than any typical RISC instruction set; a lot is packed into those 32-bit instructions. And at the next level, one could always use the same header type for every block. Then dealing with the block structure is only a simple matter of arithmetic, and now one can, for example, have a variable-length instruction set. Yes, choosing the best header for any given block if you allow the compiler to generate all the available instructions is complicated. But while that gets the best possible performance, people aren't forced to do that in order to make use of the architecture. Simpler workarounds are available. John Savard