Re: bytegroesse, was endianess/Re: audio-cd

From: Bernd Walter <ticso(at)cicely8.cicely.de>
Date: Fri, 22 Mar 2002 19:37:54 +0100

On Fri, Mar 22, 2002 at 03:24:48PM +0100, Michael Haertl wrote:
> Oliver Fromme wrote:
> > Michael Haertl wrote:
> > > Oliver Fromme wrote:
> > > > [...]
> > > > Hinzu kommt auch, daß es Plattformen gibt, wo es gar nicht
> > > > möglich ist, einzelne Bytes zu lesen, z.B. auf Alpha. Da
> > > > _kann_ der Prozessor nur ein ganzes Wort aus dem Speicher
> > > > lesen. Wenn ein Programm nur ein Byte braucht, muß es
> > > > durch Maskierungs- und/oder Verschiebeoperationen heraus-
> > > > gefiltert werden.
>
> Wenn das in Software passiert, dann klingt das nach uferlos
> Overhead.

Absolut nicht.
Ein Speicherzugriff dauert lange und die paar Registerzugriffe
für die Maskierung kann in der Regel gleichzeitig zum nächsten
Befehl passieren.
Alphas haben auch andere einem Intel User unbekannte Sitten,
so kann eine Alpha nur mit 16bit absoluten Werten umgehen.

> > > ["Verschwendung", d.h. z.B. sizeof(char) == sizeof(long)]
> > > Fuer den Standardfall (z.B. logische Variablen,
> > > "kleine" Schleifenzaehler) ist dann eigentlich kein Workaround
> > > notwendig.
> >
> > Verstehe ich nicht, wozu ein Workaround?
>
> Ja eben das Shiften/Maskieren beim extrahieren von Octetts aus
> einem "Word" meinte ich.

Schleifenzähler macht man mit einem int.
Außerdem landen die eh in einem Register, was die Maskierung
nach dem laden überflüssig macht.

> > Der Punkt ist aber, daß Speicherzugriffe (auf's RAM) nur
> > Wortweise erfolgen können (32 und 64 Bit), nicht Byteweise.
>
> Das Businterface des Prozessors macht das ohnehin so (s.u.).
> Wenn "LoadByte/StoreByte" im Befehlssatz des Prozessors nicht
> mehr vorhanden ist, dann macht es m.E. kaum Sinn z.B. 4 "chars"
> in ein Speicherwort zu packen. Das Extrahieren eines chars
> aus diesem Wort kostet Codesize und Performance, Speicher
> hingegen so gut wie nix (naja, ok, nicht ganz).

Performance eben nicht.
Gemacht werden muss das ja sowieso.

> Christian Weisgerber wrote:
> > Michael Haertl wrote:
> > > Ferner wundert es mich schon, dass ein Alpha ein 64bit-
> > > Register nicht in 8 atomaren Einheiten ansprechen kann.
>
> > Kann er. Alphas können mit Bytes hantieren, es gibt einige ganz
> > interessante Befehle dafür [...]
>
> Aha, also doch. Das klingt schon wesentlich interessanter als
> Shiften/Maskieren in Software (finde ich).

Erst spätere Modelle.
Aber das hat eher was damit zu tun, das die meisten Compiler
schlecht sind.
Mit dem Compaq Compiler haben die Befehle fast keinen Unterschied
gemacht.

> Oliver Fromme wrote:
> > Ferner muß jeder [externe] Zugriff auch »aligned« sein, sonst
> > gibt's einen Prozessor-Trap.
>
> Das gabs m.W. doch auch schon beim m68k (?).

Eigendlich bei jeder >=32bit CPU ausser x86.

> > > Dass
> > > auf dem externen Buss nur noch Woerter (und meist nur noch in
> > > Bursts) transportiert werden ist ja aufgrund der Cache-
> > > Hierarchien und Zugriffszeiten kaum anders sinnvoll.
> >
> > Stimmt. Da sieht man mal wieder, wie unsinnig die i386-
> > Architektur von intel ist ...
>
> Den Zusammenhang verstehe ich nicht, das ist schliesslich fast
> ueberall aehnlich geloest, so eben auch beim Pentium-X.

Deshalb sollte auch auf x86 Maschinen richtig programmiert werden.
Aber das verstehen die meisten nicht.

-- 
B.Walter              COSMO-Project         http://www.cosmo-project.de
ticso(at)cicely.de         Usergroup           info(at)cosmo-project.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 22 Mar 2002 - 19:40:26 CET

search this site