Pointer compression is atypical

Article: ARM Goes 64-bit
By: Paul A. Clayton (paaronclayton.delete@this.gmail.com), August 17, 2012 9:43 am
Room: Moderated Discussions
Richard Cownie (tich.delete@this.pobox.com) on August 17, 2012 8:46 am wrote:
[snip]
> That seems plausible *if* you just take a big C or C++
> program and naively recompile it for 64bits with minimal
> changes to the source code. Because then suddenly all
> pointers change from 4byte with 4byte alignment, to 8byte
> with 8byte alignment (and in C++, any object with virtual
> methods gets an 8byte header with 8byte alignment, for the
> vtable pointer). If you haven't been careful, that makes
> many data structures 1.5x - 2x bigger, so then your cache
> miss rates go up, making it slower.

Getting software to be recompiled seems difficult enough. (I think it would be nice if C/C++ allowed the compiler to rearrange internal data structures for the sake of optimization--memory use or performance.)

> You can do better though, if you're prepared to tune your
> code carefully, e.g. storing only 40 bits for pointers, or
> shifting them 2-3 bit to squeeze into a 32bit field. If
> you optimize your critical data structures, the increase in
> data size can be kept to ~ 1.1x (rather than > 1.5x), and
> then the performance hit from the larger data structures is
> probably only 2% or so.

Without special support in the ISA, pointer compression will
cost some extra operations. (One could imagine an ISA that would perform partial loads for unaligned accesses--a bit like the early ARM processors except with sign or zero extension rather than rotation. This would make loading such pointers "free".) In addition, the programming language is not likely to support such easily. (With C++, one could presumably implement compressed pointers in much the same way one can implement smart pointers.)

> This all depends on what kind of app it is, of course - my
> experience is with a big EDA app, in C++, with 100s of
> different classes, most of which were at least 50% pointers,
> so keeping pointers small was a big deal.

A more likely scenario is combining fat pointers and compressed pointers, so one still has a 64-bit pointer but it includes some type (or other) metadata. (Some Java implementations do this. AArch64's optional ignoring of the 8 MSbits might be targeted to such uses.)

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