Frage

Ich habe einige SIMD-code in den Altivec-Verarbeitung 32-bit-integer-Werte parallel.In einigen Fällen möchte ich zu laden die Integer little endian, in anderen Fällen als big-endian (Hinweis:diese Wahl ist unabhängig von der nativen CPU-endian Typ;es basiert auf dem, was der Algorithmus ausgeführt wird).Das eigentliche byte-swap ist sehr einfach mit Altivec ist permutiert Operationen, wie dokumentiert von Apple.

Der Teil, den ich befürchte, ist, dass die PowerPC-können entweder groß oder little-endian-Betrieb, und so weiß ich nicht, ob ich brauche, um byte-swap für little-endian lädt/speichert oder big-endian lädt/speichert.(Derzeit mein code immer nur tut es für little-endian und nie swaps für das big-endian-Speicher-ops, die funktioniert gut auf der 970 die ich derzeit benutze, denn es läuft big-endian).

Von dem, was ich finden kann, Kkks in der little-endian-Modus sind relativ selten, aber Sie existieren, und im Idealfall würde ich wie zu haben mein code korrekt und schnell, unabhängig vom Modus.

Ist es eine Art des Umgangs mit big-und little-endian-Lasten, die AltiVec-Register unabhängig von der CPU-endian?Gibt es andere Fragen im Zusammenhang mit diesem, das ich wissen sollte?Die Wikipedia hat die (uncited, natürlich) - Anweisung:

"AltiVec-Operationen, trotz der 128-bit -, werden so behandelt, als wären Sie 64-bit.Dies ermöglicht die Kompatibilität mit little-endian-motherboards, die entworfen wurden, vor AltiVec."

das macht mich denke, es gibt möglicherweise noch andere Gemeinheiten spezifischen AltiVec in little-endian-Modus.

War es hilfreich?

Lösung

So ziemlich alle PowerPC-code gibt, wird davon ausgegangen big-endian und alle ARM-code gibt, wird davon ausgegangen little endian.

Es gibt einige spezielle Fälle, in denen endian-Swap verwendet — offenbar VirtualPC stützte sich auf little-endian-Modus und damit zunächst nicht Arbeit auf die G5 (die nicht enthalten sind) — aber ich würde nicht sorgen über diese.

ARM hat ein ähnliches problem in big-endian-Modus:doubles mixed-endian.Die "pseudo-endian" wird erreicht, indem XORing the low-order address bits mit 0 x 2 (für halfword Zugänge) und 0x3 (für byte-Zugriffe), so dass der wirksamen Bestellung innerhalb einer 32-bit-Wortes vertauscht, aber diese bricht für 64-bit-Zugriffe.Ich vermute, dass der gleiche trick verwendet wird, die auf PowerPC außer getan 64 bit at a time.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top