Verwendung von soft-float in ARM


KidPaddle

Very Active Member
Joined
May 14, 2006
Messages
491
Location
Germany
Hallo,

ich möchte die langsamen Standard Mathefunktionen durch schnellere ersetzen und bin bei der Suche im Internet auf den Hinweis gestossen, das man -soft-float beim kompilieren/linken angegeben soll. Leider habe keine Ahnung, wie das gemacht werden soll und es beim dem GP2X überhaupt funktioniert.

Hat das schon jemand gemacht und wenn ja, wie?

Gruß
Thomas
 
ist ein compiler-parameter wie -O3 ... einfach beim compileraifruf mit in die zeile schreiben oder in der makefile zu den cflags dazupacken.
 
Habe mittlerweile festgestellt, das die SDL - Bibliothken aus GHP SDK mit -hard-float kompiliert sind und damit nicht kompatible zu der Angabe -soft-float sind. Zumindestens sagt dieses der Linker.

Kennt jemand eine "C", nicht "C++", Bibliothek, die unter der GPL/LGPL steht und einfach mit eingebunden werden kann. Mir geht es um die Ersetzung der Funktionen sin, cos und pow durch schnellere Funktionen, welche ungenauer sein dürfen.

Gruß
Thomas
 
KidPaddle said:
Hallo,

ich möchte die langsamen Standard Mathefunktionen durch schnellere ersetzen und bin bei der Suche im Internet auf den Hinweis gestossen, das man -soft-float beim kompilieren/linken angegeben soll. Leider habe keine Ahnung, wie das gemacht werden soll und es beim dem GP2X überhaupt funktioniert.

Hat das schon jemand gemacht und wenn ja, wie?

Gruß
Thomas

Hallo,

ob soft-float oder hard-float wird durch die Toolchain entschieden. Dazu gehoeren bintuils, compiler(gcc,g++) und libc(glibc oder uclibc). Zum dem gibt es im kernel noch verschiedenen floatingpoint emulationen, die darauf aber keinen Einfluss haben, ausser vielleicht Geschwindigkeit(habe ich aber nie genau getestet). So jetzt der Knackpunkt du kannst es nicht mixen. Daher wenn du ein Programm mit einer Toolchain baust die mit hard-float compiliert wurde, läuft die nicht mit einer libc die mit soft-float
gebaut wurde und umgedreht. So jetzt kommt das aber. Arm hat eine neue ABI gemacht und nennt sie EABI, damit ist es möglich hard-float
und soft-float compilierte binaries zu mixen und laufen zu lassen.
Das wird aber wohl nie auf dem gp2x zu sehen sein, da man einen kernel 2.6 braucht.

Gruss Henning
 
Es gibt Bibliotheken von AMD und Intel die spezielle Augaben (Vektorenprobleme z.B.) sehr schnell und effektiv lösen können. Gemacht wird es natürlich in dem bestimmte CPU Features genutzt werden (3DNow, SSE) und die Bibliotheken womöglich teilweise handoptimiert wurden. Die CPU des GP2X hat aber weder eine FPU noch eine Vektoreinheit, deswegen wäre es sinnlos solch eine Bibliothek zu portieren.

Generell halte ich die Frage aber schon für ganze gerechtfertigt, deswegen hier mal ein schnelles potenzieren hoch 2 *G* (sozusagen als kleiner Anfang)
Code:
<i>
</i>unsigned int inline pow2(unsigned int var) {
  return var << 1;
}

(Es sollte aber angemerkt werden, dass die CPU derartige Shift-operationen in vielen anderen Operationen in nur 1 Zyklus quasi nebenbei mit erledigen kann - eventuell ist eine extra Funktion dafür reiner Overkill)
 
wenn der bereich in dem du cos/sin brauchst abschaetzbar ist, kannst du es per lookup table machen, also einfach fuer die werte die auftreten werden vorberechnen, das als fixed point werte in nem array ablegen.

schneller wirds nicht werden und aufwaendiger wie in ne neue library einarbeiten ist das auch nicht ;)
 
G.o.D said:
wenn der bereich in dem du cos/sin brauchst abschaetzbar ist, kannst du es per lookup table machen, also einfach fuer die werte die auftreten werden vorberechnen, das als fixed point werte in nem array ablegen.

schneller wirds nicht werden und aufwaendiger wie in ne neue library einarbeiten ist das auch nicht ;)

So lief das bei mir mit dem x86 Assembler immer. Für die Genauigkeit kann man entsprechend hohe Multiplikatoren nehmen. D.h. den sinus 0...1 auf int32 abbilden
 
Statisch linken

<t>Du musst dein Projekt/Spiel/Programm nun einfach nur statisch linken und gut ist. Denn du kannst nicht gewähleisten welche Libs (und vor allem ob diese mit oder ohne HW Float kompiliert wurden) auf dem Zielsystem vorhanden sind.<br/>
<br/>
Gruß<br/>
paines</t>
 
Back
Top