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

From: Michael Haertl <michael.haertl(at)gmx.net>
Date: Tue, 26 Mar 2002 16:18:14 +0100

Bernd Walter wrote:
> Michael Haertl wrote:
> > Oliver Fromme wrote:
> > > Michael Haertl wrote:
> > > > Oliver Fromme wrote:
> > > > > [...]
> > > > > 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.

Der Pfad L1-Cache<-->Register ist nicht wirklich langsam. Und
weniger benoetigte Befehle sind meistens schneller als mehrere.

Vielleicht denke ich zu sehr auf Bitebene in DSP-Systemen und
zu wenig in "-O3" (obwohl _mir_ das oft vorgeworfen wurde).

> > > > ["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.

Sagt auch keiner was anderes. Aber ist int auf einer Alpha
64 bit ? Oder muss ein 32bit-int nicht auch aus einem 64bit-
(128bit?)Wort extrahiert werden ?

> Außerdem landen die eh in einem Register, was die Maskierung
> nach dem laden überflüssig macht.

Die Anzahl der Register ist ja auch nicht unendlich. Man muss
ja schliesslich auch noch was arbeiten.

> > in ein Speicherwort zu packen. Das Extrahieren eines chars
> > aus diesem Wort kostet Codesize und Performance [...]
>
> Performance eben nicht. Gemacht werden muss das ja sowieso.

Gemacht werden muss das eben nicht sowieso. Man kann einen
"kurzen" Datentyp ja auch in einem Wort (nativer Prozessorbreite)
unterbringen und benoetigt dann eben nur einen Ladebefehl und
nicht einen Ladebefehl + Lade_Maske + Maskierbefehl.

Natuerlich ist das nicht unbedingt auf alle Situationen anwendbar.

> [Byte-Befehl auf Alpha]
> Mit dem Compaq Compiler haben die Befehle fast keinen Unterschied
> gemacht.

Von welchem "Compaq Compiler" sprichst du (sprich: fuer welches
OS) ?

> [non-aligned Buszugriffe]
> Deshalb sollte auch auf x86 Maschinen richtig programmiert werden.
> Aber das verstehen die meisten nicht.

Es ist halt oft auch nicht wirklich relevant. Megaherze sind ja
meist genuegend da. Und auf Hochsprachenebene moechte man
sich darum auch gar nicht so sehr kuemmern (dafuer gibts
schliesslich compiler), da sind andere Dinge dann wichtiger.

-- 
/* Michael Haertl */
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 26 Mar 2002 - 16:23:58 CET

search this site