It's mainly instruction cache lines that I am interested in but it
wouldn't hurt to know those for data caches too if they are
states that cache line sizes go up as high as 512 bytes. That seems
unreasonably high. Does anyone know what machine or machines that
Athlon and Opteron use 512 bit cache lines and I'm sure a few more.
many (many) machines use 256 bit cache lines
early cached 32 bit machines would have used 128 bit cache lines
This is a delicate balance between latency and bandwidth; and another
delicate balance between true and false sharing. And there is no 1
optimal line size.
portable adj, code that compiles under more than one compiler
these opinions are mine, all mine; HP might not want them anyway... :)
feel free to post, OR email to rick.jones2 in hp.com but NOT BOTH...
It's unusual to see cache line sizes written in bits ... but if you
prefer that then the Wikipedia article says cache line sizes go as
high as 4096 bits.
Whichever way you write it that's a large line size. I wonder which
machine(s) it applies to. Maybe a supercomputer? It's not the Cray X1
That uses 32 bytes (or 256 bits if you prefer).
I wonder if the Wikipedia article is right. I may add a citation-
needed tag to it.
Someone e-mailed this to me directly rather than posting here. Perhaps
he receives Usenet via an email gateway. I don't know. At any rate I
presume he prefers his name and organisation not to be included so I
am posting his reply here anonymously.
To the person who sent me this: thank you. You know who you are. :-)
1) Most if not all of the MIPS processors used by SGI had 128 byte
line sizes (the
R8000 processor may have used a large cache line size with 128
2) The IBM Power 2 processor I believe used 256 byte line sizes.
included the P2SC.
3) The IBM Power 3 processors (all four variants) used 128 byte line
4) The IBM Power 4/Power 4+ processor used 128 byte line sizes for
L1 and L2 cache, and a 512 byte line size with 128 byte segment
for the L3 cache. (Don't know about more recent IBM processors).
5) I think that all of the ALPHA processors used a 64 byte line size.
6) All of the HP PA-RISC 8XXX processors used a 64 byte line size.
Earlier HP PA-RISC processors used either 32 byte or 64 byte line
sizes (check on a per processor basis if you really care).
7) I think that the Motorola 68020 and beyond used 32 byte line
8) Intel X86 processors starting with the 486 used 32 byte line
I think that more recent versions use 64 byte line sizes, but am
not certain as to when they changed.
9) I think that all AMD Opteron processors and beyond use 64 byte
line sizes, but am not certain about older AMD processors.
10) Fairly certain that all Itanium processors use 64 byte line
11) SUN UltraSPARC IIs used 64 byte line sizes.
12) SUN UltraSPARC IIIs used 64 byte L1 line sizes and I think 512
L2 line sizes, with 64 byte segment sizes. Don't know about
recent UltraSPARC processors.
> 8) Intel X86 processors starting with the 486 used 32 byte line
> sizes. I think that more recent versions use 64 byte line sizes,
> but am not certain as to when they changed.
NetBurst architecture ones use 128-byte cache lines. Core, Core 2, and
so on use 64-byte lines.
> 10) Fairly certain that all Itanium processors use 64 byte line
128 byte IIRC
John Dallman, j...@cix.co.uk, HTML mail is treated as probable spam.
<j...@cix.compulink.co.uk> wrote in message
> In article
> james.h...@googlemail.com (James Harris) wrote:
>> 8) Intel X86 processors starting with the 486 used 32 byte line
>> sizes. I think that more recent versions use 64 byte line sizes,
>> but am not certain as to when they changed.
> NetBurst architecture ones use 128-byte cache lines. Core, Core 2, and
> so on use 64-byte lines.
The NetBurst lines are two way sectored (64 byte sectors). The other sector
is treated as a prefetch. So, the cache is tagged to 128 byte, but the bus
transaction units are all 64 byte... Core 2 may be the same, I forget...
>> 10) Fairly certain that all Itanium processors use 64 byte line
> 128 byte IIRC
Confirmed. All modern Itaniums are 128 byte (Merced might of been 64, that
is going way back :).
Doesn't NetBurst split each 128-byte line into two segments, which can
be loaded independently?
"almost all programming can be viewed as an exercise in caching"
All 68020++ systems use 16 byte per cache line with the following
020: 256 inst direct mapped
030: 256 inst, 256 data; both direct mapped
040: 4k inst, 4k data; both 4 set associative
060: 8k inst, 8k data; both 4 set associative
on 040 and 060 you can use the MOVE16 instruction to do memory-to-
memory bulk copies without polluting the data cache, since it does a
direct whole line read and whole line write and never reads the
UltraSPARC T1 use 64-byte L2 cache line:
>8) Intel X86 processors starting with the 486 used 32 byte line
> I think that more recent versions use 64 byte line sizes, but am
> not certain as to when they changed.
The 486 has 16 byte cache lines. Interface to memory is 32 bits. The same
may also apply to the Pentium Overdrive.
Concrning IBM (AIX):
Defines the _system_configuration structure.
The systemcfg.h file defines the _system_configuration structure. This
is a global structure that identifies system characteristics. The
system_configuration structure is provided in read-only system memory.
New fields will be added to the structure in future releases. The
attributes in the _system_configuration structure have the following
[------- omitted ---------]
Contains the line size in bytes of L1 data cache.
Contains the size of the L2 cache in bytes. A value of 0 indicates no
L2 cache is present.
// ------------- Test program ----
std:: cout << _system_configuration.dcache_line <<
std:: cout << _system_configuration.L2_cache_size <<
128 // L1
0 // L2