64-bit pointers eat some performance

Article: ARM Goes 64-bit
By: Paul A. Clayton (paaronclayton.delete@this.gmail.com), August 17, 2012 6:19 am
Room: Moderated Discussions
Kenneth Jonsson (kj.delete@this.localhost.org) on August 17, 2012 2:41 am wrote:
[snip Actual Data on register use]

Thank you for providing the data. Even such a small sample looks interesting.

> So to spin the question a bit: what are the
> downsides of a large number of GPRs?

For x86-64 instruction encoding was (it seems) the biggest issue. AArch64 uses (fixed-size) 32-bit instructions, so five bit register names are reasonable.

Increasing the number of registers obviously increases the size of the register file (which means more area and both more active and more static power use). Register renaming faces a similar issue, possibly more so since the number of reads and writes per cycle in the renaming structure will be greater than the number of register reads and writes per cycle (after a branch misprediction some instructions will almost certainly have been renamed but not executed--a possible exception would be with a multithreaded core).

In addition, renaming it seems tends to be handled in a more brute force manner and with a guaranteed fixed output; register reading is often avoided by result forwarding (and some implementations reduce the number of register read ports so that peak execution would not be possible without some forwarding and/or reduced number of register sources [e.g., operations with an immediate source and moves]). Reducing the number of register read ports may be more attractive in an OoO design (and an OoO design might also make write port reduction more practical). In some implementations, a write into the renamer table also reads the preceding value, adding a read port that would not be needed for the register file.

There are mechanisms to reduce the port count for the renaming table. Predecoded instructions, especially in a trace cache with its single entry point nature, could support the use of banking and deduplication (of both reads and writes). Banking and asymmetric porting can reduce the overhead of table access itself. (Increasing the number of architected registers could increase the opportunities for banking and other special cases.) These would tend to remove guaranteed throughput, but such might be an acceptable trade-off for greater typical throughput within an area/power budget.

>It has to be fairly big trade-offs to be
> made somewhere as very few architectures seem to move beyond 32 GPRs and AMD did
> for some reason settle at 16 GPRs when they designed x86_64.

It is difficult to fit 6-bit register names in a 32-bit instruction without excessive sacrifices in immediate sizes and other areas--ISAs with more than 32 registers tend to have longer instructions (e.g., 40 for IBMs experimental HPC ISA and 41 for Itanium, though Cell's SPEs have 128 registers with 32-bit instructions). (Likewise, adding four register name extension bits rather than two for REX prefixes would have been more difficult without using a two-byte prefix.)

> Not a perfect comparison, but the performance difference
> between IA32 and x86_64 is very small so IA32 cannot be held
> back too much by its lack of GPRs.

64-bit points supposedly eat about 10% of performance, IIRC; so the gain from more registers is mostly consumed by larger pointers. (x86-64 also slightly increases code size, which might have a tiny performance impact.)

[snip]
> Sorry for a long post, interesting topic i.m.h.o :)

Long posts are quite acceptable if they have good content, and I certainly cannot complain because I have a severe problem with being concise. I agree the topic is interesting.
< Previous Post in ThreadNext Post in Thread >
TopicPosted ByDate
New Article: ARM Goes 64-bitDavid Kanter2012/08/14 12:04 AM
  New Article: ARM Goes 64-bitnone2012/08/14 12:44 AM
    New Article: ARM Goes 64-bitDavid Kanter2012/08/14 01:04 AM
    MIPS MT-ASEPaul A. Clayton2012/08/14 09:01 AM
      MONITOR/MWAITEduardoS2012/08/14 10:08 AM
        MWAIT not specifically MTPaul A. Clayton2012/08/14 10:36 AM
          MWAIT not specifically MTEduardoS2012/08/15 03:16 PM
        MONITOR/MWAITanonymou52012/08/14 11:07 AM
          MONITOR/MWAITEduardoS2012/08/15 03:20 PM
      MIPS MT-ASErwessel2012/08/14 10:14 AM
  New Article: ARM Goes 64-bitSHK2012/08/14 02:01 AM
  New Article: ARM Goes 64-bitanon2012/08/14 02:37 AM
    New Article: ARM Goes 64-bitRichard Cownie2012/08/14 03:57 AM
      New Article: ARM Goes 64-bitanon2012/08/14 04:29 AM
      New Article: ARM Goes 64-bitnone2012/08/14 04:44 AM
        New Article: ARM Goes 64-bitanon2012/08/14 05:28 AM
          New Article: ARM Goes 64-bitanon2012/08/14 05:32 AM
            New Article: ARM Goes 64-bitEduardoS2012/08/14 06:06 AM
          New Article: ARM Goes 64-bitnone2012/08/14 05:40 AM
            AArch64 select better than cmovPaul A. Clayton2012/08/14 06:08 AM
            New Article: ARM Goes 64-bitanon2012/08/14 06:12 AM
              New Article: ARM Goes 64-bitnone2012/08/14 06:25 AM
                Predicated ld/store are usefulPaul A. Clayton2012/08/14 06:48 AM
                  Predicated ld/store are usefulnone2012/08/14 06:56 AM
                    Predicated ld/store are usefulanon2012/08/14 07:07 AM
                    Predicated stores might not be that badPaul A. Clayton2012/08/14 07:27 AM
                      Predicated stores might not be that badDavid Kanter2012/08/15 01:14 AM
                        Predicated stores might not be that badMichael S2012/08/15 11:41 AM
                        Predicated stores might not be that badR Byron2012/08/17 04:09 AM
                New Article: ARM Goes 64-bitanon2012/08/14 06:54 AM
                  New Article: ARM Goes 64-bitnone2012/08/14 07:04 AM
                    New Article: ARM Goes 64-bitanon2012/08/14 07:43 AM
          New Article: ARM Goes 64-bitEduardoS2012/08/14 06:07 AM
            New Article: ARM Goes 64-bitanon2012/08/14 06:20 AM
              New Article: ARM Goes 64-bitnone2012/08/14 06:29 AM
                New Article: ARM Goes 64-bitanon2012/08/14 07:00 AM
            New Article: ARM Goes 64-bitMichael S2012/08/14 03:43 PM
        New Article: ARM Goes 64-bitRichard Cownie2012/08/14 06:53 AM
          OT: Conrad's "Youth"Richard Cownie2012/08/14 07:20 AM
      New Article: ARM Goes 64-bitEduardoS2012/08/14 06:04 AM
        New Article: ARM Goes 64-bitmpx2012/08/14 08:59 AM
          New Article: ARM Goes 64-bitAntti-Ville Tuunainen2012/08/14 09:16 AM
        New Article: ARM Goes 64-bitanonymou52012/08/14 11:03 AM
          New Article: ARM Goes 64-bitname992012/11/17 03:31 PM
            Microarchitecting a counter registerPaul A. Clayton2012/11/17 07:37 PM
    New Article: ARM Goes 64-bitbakaneko2012/08/14 04:21 AM
      New Article: ARM Goes 64-bitname992012/11/17 03:40 PM
        New Article: ARM Goes 64-bitEduardoS2012/11/17 04:52 PM
        New Article: ARM Goes 64-bitDoug S2012/11/17 05:48 PM
        New Article: ARM Goes 64-bitbakaneko2012/11/18 05:40 PM
          New Article: ARM Goes 64-bitWilco2012/11/19 07:59 AM
            New Article: ARM Goes 64-bitEduardoS2012/11/19 08:23 AM
              New Article: ARM Goes 64-bitWilco2012/11/19 09:31 AM
                Downloading µarch-specific binaries?Paul A. Clayton2012/11/19 11:21 AM
                New Article: ARM Goes 64-bitEduardoS2012/11/19 11:41 AM
                  New Article: ARM Goes 64-bitWilco2012/11/21 07:44 AM
                    JIT vs. static compilation (Was: New Article: ARM Goes 64-bit)VMguy2012/11/22 03:21 AM
                      JIT vs. static compilation (Was: New Article: ARM Goes 64-bit)David Kanter2012/11/22 12:12 PM
                        JIT vs. static compilation (Was: New Article: ARM Goes 64-bit)Gabriele Svelto2012/11/23 03:50 AM
                    New Article: ARM Goes 64-bitEduardoS2012/11/23 10:09 AM
                      New Article: ARM Goes 64-bitEBFE2012/11/26 01:24 AM
                        New Article: ARM Goes 64-bitGabriele Svelto2012/11/26 03:33 AM
                          New Article: ARM Goes 64-bitEBFE2012/11/27 11:17 PM
                            New Article: ARM Goes 64-bitGabriele Svelto2012/11/28 02:32 AM
                        New Article: ARM Goes 64-bitEduardoS2012/11/26 12:16 PM
                          New Article: ARM Goes 64-bitEBFE2012/11/28 12:33 AM
                            New Article: ARM Goes 64-bitEduardoS2012/11/28 05:53 AM
                              New Article: ARM Goes 64-bitMichael S2012/11/28 06:15 AM
                                New Article: ARM Goes 64-bitEduardoS2012/11/28 07:33 AM
                                  New Article: ARM Goes 64-bitMichael S2012/11/28 09:16 AM
                                    New Article: ARM Goes 64-bitEduardoS2012/11/28 09:53 AM
                                    New Article: ARM Goes 64-bitEugene Nalimov2012/11/28 05:58 PM
                                      Amazing!EduardoS2012/11/28 07:25 PM
                                        Amazing! (non-italic response)EduardoS2012/11/28 07:25 PM
                                        Amazing!EBFE2012/11/28 08:20 PM
                                          Undefined behaviour doubles downEduardoS2012/11/28 09:10 PM
                              New Article: ARM Goes 64-bitEBFE2012/11/28 07:54 PM
                                New Article: ARM Goes 64-bitEduardoS2012/11/28 09:21 PM
                Have you heard of Transmeta?David Kanter2012/11/19 03:47 PM
            New Article: ARM Goes 64-bitbakaneko2012/11/19 09:08 AM
            New Article: ARM Goes 64-bitDavid Kanter2012/11/19 03:40 PM
              Semantic Dictionary EncodingRay2012/11/19 10:37 PM
              New Article: ARM Goes 64-bitRohit2012/11/20 04:48 PM
                New Article: ARM Goes 64-bitDavid Kanter2012/11/20 11:07 PM
                  New Article: ARM Goes 64-bitWilco2012/11/21 06:41 AM
                    New Article: ARM Goes 64-bitDavid Kanter2012/11/21 10:12 AM
                    A JIT exampleMark Roulo2012/11/21 10:30 AM
                      A JIT exampleWilco2012/11/21 07:04 PM
                        A JIT examplerwessel2012/11/21 09:05 PM
                        A JIT exampleGabriele Svelto2012/11/23 03:53 AM
                        A JIT exampleEduardoS2012/11/23 10:13 AM
                          A JIT exampleWilco2012/11/23 01:41 PM
                            A JIT exampleEduardoS2012/11/23 02:06 PM
                            A JIT exampleGabriele Svelto2012/11/23 04:09 PM
                              A JIT exampleSymmetry2012/11/26 05:58 AM
            New Article: ARM Goes 64-bitRay2012/11/19 10:27 PM
    New Article: ARM Goes 64-bitDavid Kanter2012/08/14 09:11 AM
  v7-M is Thumb-onlyPaul A. Clayton2012/08/14 06:58 AM
  Minor suggested correctionPaul A. Clayton2012/08/14 08:33 AM
    Minor suggested correctionanon2012/08/14 08:57 AM
  New Article: ARM Goes 64-bitExophase2012/08/14 08:33 AM
    New Article: ARM Goes 64-bitDavid Kanter2012/08/14 09:16 AM
      New Article: ARM Goes 64-bitjigal2012/08/15 01:49 PM
  Correction re ARM and BBC MicroPaul2012/08/14 08:59 PM
    Correction re ARM and BBC MicroPer Hesselgren2012/08/15 03:27 AM
  Memory BW so lowPer Hesselgren2012/08/15 03:14 AM
    Memory BW so lownone2012/08/15 11:16 AM
  New Article: ARM Goes 64-bitdado2012/08/15 10:25 AM
  Number of GPRsKenneth Jonsson2012/08/16 02:35 PM
    Number of GPRsExophase2012/08/16 02:52 PM
      Number of GPRsKenneth Jonsson2012/08/17 02:41 AM
        Ooops, missing link...Kenneth Jonsson2012/08/17 02:44 AM
        64-bit pointers eat some performancePaul A. Clayton2012/08/17 06:19 AM
          64-bit pointers eat some performancebakaneko2012/08/17 08:37 AM
            Brute force seems to workPaul A. Clayton2012/08/17 10:08 AM
              Brute force seems to workbakaneko2012/08/17 11:15 AM
          64-bit pointers eat some performanceRichard Cownie2012/08/17 08:46 AM
            Pointer compression is atypicalPaul A. Clayton2012/08/17 10:43 AM
              Pointer compression is atypicalRichard Cownie2012/08/17 12:57 PM
                Pointer compression is atypicalHoward Chu2012/08/22 10:17 PM
                  Pointer compression is atypicalRichard Cownie2012/08/23 04:48 AM
                    Pointer compression is atypicalHoward Chu2012/08/23 06:51 AM
              Pointer compression is atypicalWilco2012/08/17 02:41 PM
                Pointer compression is atypicalRichard Cownie2012/08/17 04:13 PM
                  Pointer compression is atypicalRicardo B2012/08/19 10:44 AM
                  Pointer compression is atypicalHoward Chu2012/08/22 10:08 PM
                    Unified libraries?Paul A. Clayton2012/08/23 07:49 AM
                    Pointer compression is atypicalRichard Cownie2012/08/23 08:44 AM
                      Pointer compression is atypicalHoward Chu2012/08/23 05:17 PM
                        Pointer compression is atypicalanon2012/08/23 08:15 PM
                          Pointer compression is atypicalHoward Chu2012/08/23 09:33 PM
            64-bit pointers eat some performanceFoo_2012/08/18 12:09 PM
              64-bit pointers eat some performanceRichard Cownie2012/08/18 05:25 PM
                64-bit pointers eat some performanceRichard Cownie2012/08/18 05:32 PM
            Page-related benefit of small pointersPaul A. Clayton2012/08/23 08:36 AM
        Number of GPRsWilco2012/08/17 06:31 AM
          Number of GPRsKenneth Jonsson2012/08/17 11:54 AM
            Number of GPRsExophase2012/08/17 12:44 PM
              Number of GPRsKenneth Jonsson2012/08/17 01:22 PM
                Number of GPRsWilco2012/08/17 02:53 PM
        What about dynamic utilization?Exophase2012/08/17 09:30 AM
          Compiler vs. assembly aliasing knowledge?Paul A. Clayton2012/08/17 10:20 AM
            Compiler vs. assembly aliasing knowledge?Exophase2012/08/17 11:09 AM
            Compiler vs. assembly aliasing knowledge?anon2012/08/18 02:23 AM
              Compiler vs. assembly aliasing knowledge?Ricardo B2012/08/19 11:02 AM
                Compiler vs. assembly aliasing knowledge?anon2012/08/19 06:07 PM
                  Compiler vs. assembly aliasing knowledge?Ricardo B2012/08/19 07:26 PM
                    Compiler vs. assembly aliasing knowledge?anon2012/08/19 10:03 PM
                      Compiler vs. assembly aliasing knowledge?anon2012/08/20 01:59 AM
        Number of GPRsDavid Kanter2012/08/17 12:46 PM
          RAT issues as part of reason 1Paul A. Clayton2012/08/17 02:18 PM
        Number of GPRsname992012/11/17 06:37 PM
          Large ARFs increase renaming costPaul A. Clayton2012/11/17 09:23 PM
    Number of GPRsDavid Kanter2012/08/16 03:31 PM
    Number of GPRsRichard Cownie2012/08/16 05:17 PM
    32 GPRs ~2-3%Paul A. Clayton2012/08/16 06:27 PM
      Oops, Message-ID: aaed6e38-c7bd-467e-ba41-f40cf1020e5e@googlegroups.com (NT)Paul A. Clayton2012/08/16 06:29 PM
      32 GPRs ~2-3%Exophase2012/08/16 10:06 PM
        R31 as SP/zero is kind of neat (NT)Paul A. Clayton2012/08/17 06:23 AM
        32 GPRs ~2-3%rwessel2012/08/17 08:24 AM
          32 GPRs ~2-3%Exophase2012/08/17 09:16 AM
            32 GPRs ~2-3%Max2012/08/17 04:19 PM
      32 GPRs ~2-3%name992012/11/17 07:43 PM
    Number of GPRsmpx2012/08/17 01:11 AM
      Latency and powerPaul A. Clayton2012/08/17 06:54 AM
    Number of GPRsbakaneko2012/08/17 03:09 AM
  New Article: ARM Goes 64-bitSteve2012/08/17 02:12 PM
    New Article: ARM Goes 64-bitDavid Kanter2012/08/19 12:42 PM
      New Article: ARM Goes 64-bitDoug S2012/08/19 02:02 PM
      New Article: ARM Goes 64-bitAnon2012/08/19 07:16 PM
      New Article: ARM Goes 64-bitSteve2012/08/30 07:51 AM
  Scalar vs Vector registersRobert David Graham2012/08/19 05:19 PM
    Scalar vs Vector registersDavid Kanter2012/08/19 05:29 PM
  New Article: ARM Goes 64-bitBaserock ARM servers2012/08/21 04:13 PM
    Baserock ARM serversSysanon2012/08/21 04:14 PM
    A-15 virtualization and LPAE?Paul A. Clayton2012/08/21 06:13 PM
      A-15 virtualization and LPAE?Anon2012/08/21 07:13 PM
        Half-depth advantages?Paul A. Clayton2012/08/21 08:42 PM
          Half-depth advantages?Anon2012/08/22 03:33 PM
            Thanks for the information (NT)Paul A. Clayton2012/08/22 04:04 PM
      A-15 virtualization and LPAE?C. Ladisch2012/08/23 11:12 AM
        A-15 virtualization and LPAE?Paul2012/08/23 03:17 PM
        Excessive pessimismPaul A. Clayton2012/08/23 04:08 PM
          Excessive pessimismDavid Kanter2012/08/23 05:05 PM
    New Article: ARM Goes 64-bitMichael S2012/08/22 07:12 AM
      BTW, Baserock==product, Codethink==company (NT)Paul A. Clayton2012/08/22 08:56 AM
  New Article: ARM Goes 64-bitReinoud Zandijk2012/08/21 11:27 PM
Reply to this Topic
Name:
Email:
Topic:
Body: No Text
How do you spell green?