FPU Befehle mit CPU Befehlen mischen



  • Hallo,
    da die FPU parallel neben der CPU arbeitet, könnte man theoretisch die FPU Befehle mit "normalen" CPU Befehlen mischen.
    Also z.B. statt

    fadd
    fmul
    fadd
    mov eax, ebx
    mov ebx, ecx
    

    so was:

    fadd
    mov eax, ebx
    fmul
    mov ebx, ecx
    fadd
    

    Was ist so gängige Praxis? Ist die Lesbarkeit des Programms hier wichtiger als die Ausführungsgeschwindigkeit? Oder macht man gewöhnlich so was nicht...


  • Mod

    wo das geht, sollte man es tun. die lesbarkeit muss dabei gar nicht besonders leiden - durch geeignete formatierung kann man die pfade optisch gut voneinander trennen (etwa indem man in unterschiedliche spalten schreibt). das hauptproblem dabei ist schlicht, das es selten über lange strecken durchführbar ist:
    - es treten übergänge FPU/SSE -> integer auf, z.b. wegen irgendwelchen verzweigungen
    - die aufwand eines pfades überwiegt den des anderen erheblich (zumindest kriegt man dann aber den kürzeren zweig quasi gratis)
    - häufig bremsen sich die beiden pfade wegen zu geringer speicherbandbreite gegenseitig aus - und speicherzugriffe sind nunmal im allgemeinen nicht vektorisierbar; man braucht also nach möglichkeit aufgaben, die durch die rechengeschwindigkeit begrenzt werden

    wenn es allerdings machbar ist, kann der geschwindigkeitszuwachs enorm sein.


Anmelden zum Antworten