Maker Pro
Maker Pro

Byte addressable memory

V

v4vijayakumar

Why the memory is still byte-addressable? Would it make any difference
for a 64/32 bit processor, if it could only access 64/32 bit chunk?
 
M

mkaras

v4vijayakumar said:
Why the memory is still byte-addressable? Would it make any difference
for a 64/32 bit processor, if it could only access 64/32 bit chunk?

It makes a HUGE difference. In a large majority of programs, that run
on computers that use the memory that you are talking about, the data
is often only byte wide. Take character sets for example that are used
for information and document exchange. Older stuff all used byte-wide
data and even now Unicode at 16-bits represents an almost complete
working set. If computers of 64-bit width used all 64-bits in each data
element to represent a character for example much space goes to waste.
If software has to pack and unpack smaller sized data to and from
64-bit wide memory there is a large performance impact. Thus the
solution is to make memory byte addressable even though it may be
present on a 64-bit bus. Of course the 64-bit bus being there to
provide full width data flow when the application warrents the highest
performance.

- mkaras
 
V

v4vijayakumar

mkaras said:
It makes a HUGE difference. In a large majority of programs, that run
on computers that use the memory that you are talking about, the data
is often only byte wide. Take character sets for example that are used
for information and document exchange. Older stuff all used byte-wide
data and even now Unicode at 16-bits represents an almost complete
working set. If computers of 64-bit width used all 64-bits in each data
element to represent a character for example much space goes to waste.
If software has to pack and unpack smaller sized data to and from
64-bit wide memory there is a large performance impact. Thus the
solution is to make memory byte addressable even though it may be
present on a 64-bit bus. Of course the 64-bit bus being there to
provide full width data flow when the application warrents the highest
performance.

- mkaras

Obvious guess is memory wastage for smaller data.

Don't know it would make processor circuit complex, but we can encode
smaller data it in different ways, and stuff enough information into a
word and then move to memory. Right?
 
O

OBones

v4vijayakumar said:
Don't know it would make processor circuit complex, but we can encode
smaller data it in different ways, and stuff enough information into a
word and then move to memory. Right?

That's the compiler's job, and the source of the performance impact in
some cases.
 
F

Frithiof Andreas Jensen

I dont think all types of memory is actually byte adressable - that is one of
the things one must specifically progam into the memory controller on PowerQuick
and Athlon64's: Each memory range essentially has it's own state machine for
load/store etc.

The default is "byte mode" to be able to boot from ROM and to program the state
machines in the RAM* but this is done "manually" by using only the lower 8 data
lines!

On the physical SDRAM/DDR memory busses you will always get a/(a series of) the
full width 64/32 bit load(s). Once the data is loaded the memory controller and
the cache colludes to make the data byte adressable.

Seen from the application "the right thing" happens.
It makes a HUGE difference. In a large majority of programs, that run
on computers that use the memory that you are talking about, the data
is often only byte wide. Take character sets for example that are used
for information and document exchange. Older stuff all used byte-wide
data and even now Unicode at 16-bits represents an almost complete
working set. If computers of 64-bit width used all 64-bits in each data
element to represent a character for example much space goes to waste.
If software has to pack and unpack smaller sized data to and from
64-bit wide memory there is a large performance impact. Thus the
solution is to make memory byte addressable even though it may be
present on a 64-bit bus. Of course the 64-bit bus being there to
provide full width data flow when the application warrents the highest
performance.

- mkaras

*Setting up modern RAM to work with the memory controller is a major pain in the
butt; especially mapping the weasel words of the documentaion into bits to
flip - at both ends!
 
J

joseph2k

mkaras said:
It makes a HUGE difference. In a large majority of programs, that run
on computers that use the memory that you are talking about, the data
is often only byte wide. Take character sets for example that are used
for information and document exchange. Older stuff all used byte-wide
data and even now Unicode at 16-bits represents an almost complete
working set. If computers of 64-bit width used all 64-bits in each data
element to represent a character for example much space goes to waste.
If software has to pack and unpack smaller sized data to and from
64-bit wide memory there is a large performance impact. Thus the
solution is to make memory byte addressable even though it may be
present on a 64-bit bus. Of course the 64-bit bus being there to
provide full width data flow when the application warrents the highest
performance.

- mkaras

Of course this doesn't take into account computers with other than 2^n bit
word widths. I have worked with computers with 12 bits, 15 bits, 18 bits,
30 bits, and 36 bits. Some of these used characters of 6 bits and some
used characters of 9 bits. The 18 bit and 30 bit computers also supported
5 bit Baudot (early teletype) code.
 
Top