Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Cyborg)
  • No Skin
Collapse
Brand Logo

CIRCLE WITH A DOT

  1. Home
  2. Uncategorized
  3. some good thoughts on RISC vs CISC from Bob Colwell.

some good thoughts on RISC vs CISC from Bob Colwell.

Scheduled Pinned Locked Moved Uncategorized
18 Posts 12 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • regehr@mastodon.socialR regehr@mastodon.social

    some good thoughts on RISC vs CISC from Bob Colwell. at this point it's kind of funny and hard to imagine people getting actually angry while debating this, but there you go.

    alt: the text is too long for my instance's alt text, but it's from page 4 here: https://www.sigmicro.org/media/oralhistories/colwell.pdf

    Link Preview Image
    acsawdey@fosstodon.orgA This user is from outside of this forum
    acsawdey@fosstodon.orgA This user is from outside of this forum
    acsawdey@fosstodon.org
    wrote last edited by
    #9

    @regehr The real answer was neither CISC nor RISC, but to codesign the processor and the compiler. (Not like that, Intel & HP!)

    1 Reply Last reply
    0
    • regehr@mastodon.socialR regehr@mastodon.social

      @lispi314 maybe, but we're not exactly stuck, there's Morello

      david_chisnall@infosec.exchangeD This user is from outside of this forum
      david_chisnall@infosec.exchangeD This user is from outside of this forum
      david_chisnall@infosec.exchange
      wrote last edited by
      #10

      @regehr @lispi314

      There’s more CHERI than just Morello. We got our first ICENI (CHERIoT) chips on boards back from the fab this week, there’s a RISC-V CHERI base architecture undergoing standardisation, and Codasip has licensable IP cores for microcontroller and application processors.

      There big difference between CHERI and historical capability systems is that we co-designed the ISA and the compiler. We didn’t do things in hardware that are easy to do in software.

      I think our 2023 MICRO paper about CHERIoT does the best job of identifying the problem we are trying to solve by framing memory safety as a set of properties that a compiler wishes to enforce against code compiled by other arbitrary compilers.

      1 Reply Last reply
      0
      • regehr@mastodon.socialR regehr@mastodon.social

        @dougmerritt also addressing modes. I love good addressing modes.

        david_chisnall@infosec.exchangeD This user is from outside of this forum
        david_chisnall@infosec.exchangeD This user is from outside of this forum
        david_chisnall@infosec.exchange
        wrote last edited by
        #11

        @regehr @dougmerritt

        And condition codes. Microarchitects hated condition codes because they meant that instructions would do partial updates to the same register, which made register rename annoying. As a result, most early RISC architectures omitted them. But it turns out that there are some techniques for implementing them that aren’t that bad in superscalar chips and, on pretty much all scales of design, the performance win from having them outweighs most other things you could do with the same complexity budget. Arm’s designers really wanted to remove them for AArch64 but found that the performance hit from doing so was too high.

        I’m sad Patterson was willing to put his name on RISC-V because it’s an example of the kind of architecture that you design if you don’t measure anything.

        EDIT: The same is true of conditional move. RISC-V doesn’t have a conditional move because Krste read a paper by the Alpha architects about how it required an additional read port on the register file and this was painful. There is a very narrow window of microarchitectures for which this is true. As an experiment, I had a student add a conditional move to RSIC-V in the compiler and a simple in-order processor. The area overhead was negligible and the student found that a conditional move allowed you to get the same performance with about 25% less branch predictor state, so ended up being an area saving. I mentioned this to some Arm folks and was told that this wasn’t a new result: ‘everyone’ in the industry knew that there was roughly a 25% saving on branch predictor state from having a conditional move (and conditional moves are much easier to make useful if you have condition-code registers). AArch64 has some quite exciting variants of conditional moves, one of which gives about a 10% speedup in the hot loop of bzip2 (I think, might be some other compression algorithm) if it’s used.

        fanf@mendeddrum.orgF 1 Reply Last reply
        0
        • david_chisnall@infosec.exchangeD This user is from outside of this forum
          david_chisnall@infosec.exchangeD This user is from outside of this forum
          david_chisnall@infosec.exchange
          wrote last edited by
          #12

          @koakuma @regehr @dougmerritt

          I think so. As I recall, they don’t have two versions for the instruction variants that take an immediate (that would consume a huge amount of encoding space) but they do have some options for the three-register versions (which need 15 bits for the operands, so you can fit a lot of these in a 32-bit instruction).

          resistor@mastodon.onlineR 1 Reply Last reply
          0
          • david_chisnall@infosec.exchangeD david_chisnall@infosec.exchange

            @regehr @dougmerritt

            And condition codes. Microarchitects hated condition codes because they meant that instructions would do partial updates to the same register, which made register rename annoying. As a result, most early RISC architectures omitted them. But it turns out that there are some techniques for implementing them that aren’t that bad in superscalar chips and, on pretty much all scales of design, the performance win from having them outweighs most other things you could do with the same complexity budget. Arm’s designers really wanted to remove them for AArch64 but found that the performance hit from doing so was too high.

            I’m sad Patterson was willing to put his name on RISC-V because it’s an example of the kind of architecture that you design if you don’t measure anything.

            EDIT: The same is true of conditional move. RISC-V doesn’t have a conditional move because Krste read a paper by the Alpha architects about how it required an additional read port on the register file and this was painful. There is a very narrow window of microarchitectures for which this is true. As an experiment, I had a student add a conditional move to RSIC-V in the compiler and a simple in-order processor. The area overhead was negligible and the student found that a conditional move allowed you to get the same performance with about 25% less branch predictor state, so ended up being an area saving. I mentioned this to some Arm folks and was told that this wasn’t a new result: ‘everyone’ in the industry knew that there was roughly a 25% saving on branch predictor state from having a conditional move (and conditional moves are much easier to make useful if you have condition-code registers). AArch64 has some quite exciting variants of conditional moves, one of which gives about a 10% speedup in the hot loop of bzip2 (I think, might be some other compression algorithm) if it’s used.

            fanf@mendeddrum.orgF This user is from outside of this forum
            fanf@mendeddrum.orgF This user is from outside of this forum
            fanf@mendeddrum.org
            wrote last edited by
            #13

            @david_chisnall @regehr @dougmerritt i still refer back to john mashey’s risc-vs-cisc analysis from the 1990s https://www.yarchive.net/comp/risc_definition.html

            in which he counts instruction set features to demonstrate that risc and cisc correspond to real phenomena and aren’t just marketing

            but the main reason i like it is because these days programmers get the impression that risc vs cisc is arm vs x86 but they are really bad exemplars, because arm is the least riscy risc and x86 is the least ciscy cisc

            much better exemplars are mips and alpha vs vax and 68020

            unfortunately mashey didn’t include arm in his analysis so the reader needs a fair amount of knowledge to fill in the gap

            then there’s amd64 and arm64 which postdate mashey’s analysis and are even closer to the middle ground

            there’s clearly a thesis/antithesis/synthesis but the synthesis hasn’t been given a catchy name so it is talked about in risc-vs-cisc terms even tho that no longer makes sense

            eg wrt addressing modes the convergence looks like base + offset * stride, not just an address as in risc, and no indirection or other extraneous memory accesses as in cisc

            and things like plenty of registers, 0 or maybe 1 memory accesses in most instructions, complexity is ok if it’s register-to-register, simd is great

            david_chisnall@infosec.exchangeD 1 Reply Last reply
            0
            • fanf@mendeddrum.orgF fanf@mendeddrum.org

              @david_chisnall @regehr @dougmerritt i still refer back to john mashey’s risc-vs-cisc analysis from the 1990s https://www.yarchive.net/comp/risc_definition.html

              in which he counts instruction set features to demonstrate that risc and cisc correspond to real phenomena and aren’t just marketing

              but the main reason i like it is because these days programmers get the impression that risc vs cisc is arm vs x86 but they are really bad exemplars, because arm is the least riscy risc and x86 is the least ciscy cisc

              much better exemplars are mips and alpha vs vax and 68020

              unfortunately mashey didn’t include arm in his analysis so the reader needs a fair amount of knowledge to fill in the gap

              then there’s amd64 and arm64 which postdate mashey’s analysis and are even closer to the middle ground

              there’s clearly a thesis/antithesis/synthesis but the synthesis hasn’t been given a catchy name so it is talked about in risc-vs-cisc terms even tho that no longer makes sense

              eg wrt addressing modes the convergence looks like base + offset * stride, not just an address as in risc, and no indirection or other extraneous memory accesses as in cisc

              and things like plenty of registers, 0 or maybe 1 memory accesses in most instructions, complexity is ok if it’s register-to-register, simd is great

              david_chisnall@infosec.exchangeD This user is from outside of this forum
              david_chisnall@infosec.exchangeD This user is from outside of this forum
              david_chisnall@infosec.exchange
              wrote last edited by
              #14

              @fanf @regehr @dougmerritt

              Arm stopped referring to their architecture as RISC about 15 years ago. They now call it a ‘load-store architecture’. This applies even to AArch32, which is a pretty large instruction set, but remains mostly orthogonal and does not have instructions that implicitly touch memory.

              My favourite example of Too CISCy is one of the IBM mainframe architectures that uses a tag in a branch operand to indicate that it was double indirect. If the bit was set in the address operand, rather than jumping to that address it would load the address at the target and jump there. But this could also have the indirect bit set and so you could chain the indirections. Unfortunately, this meant it was possible to introduce cycles and so they ended up with a counter to see how many indirection steps you’d followed and gave up after a fixed number.

              1 Reply Last reply
              0
              • david_chisnall@infosec.exchangeD david_chisnall@infosec.exchange

                @koakuma @regehr @dougmerritt

                I think so. As I recall, they don’t have two versions for the instruction variants that take an immediate (that would consume a huge amount of encoding space) but they do have some options for the three-register versions (which need 15 bits for the operands, so you can fit a lot of these in a 32-bit instruction).

                resistor@mastodon.onlineR This user is from outside of this forum
                resistor@mastodon.onlineR This user is from outside of this forum
                resistor@mastodon.online
                wrote last edited by
                #15

                @david_chisnall @koakuma @regehr @dougmerritt AArch64's approach is to have conditions codes, but (a) only read/write them on a few opcodes as possible, and (b) always do a complete, not partial, condition code write.

                regehr@mastodon.socialR 1 Reply Last reply
                0
                • P This user is from outside of this forum
                  P This user is from outside of this forum
                  pinskia@hachyderm.io
                  wrote last edited by
                  #16

                  @koakuma @david_chisnall @regehr @dougmerritt powerpc multiple conditional registers is the best thing out there.
                  It also have ior, xor and and on each bit of the cr. Gcc never got around to using them (i dont know if llvm did).
                  The dot instructions would set cr0 or cr7(fp).
                  Even the altivec compare equal had a dot version which would allow for all, any and none.
                  Ppc did add isel (via booke first and then later on).

                  1 Reply Last reply
                  0
                  • regehr@mastodon.socialR regehr@mastodon.social

                    some good thoughts on RISC vs CISC from Bob Colwell. at this point it's kind of funny and hard to imagine people getting actually angry while debating this, but there you go.

                    alt: the text is too long for my instance's alt text, but it's from page 4 here: https://www.sigmicro.org/media/oralhistories/colwell.pdf

                    Link Preview Image
                    mansr@society.oftrolls.comM This user is from outside of this forum
                    mansr@society.oftrolls.comM This user is from outside of this forum
                    mansr@society.oftrolls.com
                    wrote last edited by
                    #17

                    @regehr CISC is just RISC with hardware macros.

                    1 Reply Last reply
                    0
                    • resistor@mastodon.onlineR resistor@mastodon.online

                      @david_chisnall @koakuma @regehr @dougmerritt AArch64's approach is to have conditions codes, but (a) only read/write them on a few opcodes as possible, and (b) always do a complete, not partial, condition code write.

                      regehr@mastodon.socialR This user is from outside of this forum
                      regehr@mastodon.socialR This user is from outside of this forum
                      regehr@mastodon.social
                      wrote last edited by
                      #18

                      @resistor @david_chisnall @koakuma @dougmerritt AArch64 has some imaginative condition code instructions as well, I really enjoy CCMP / CCMN

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups