PowerPC Kurs Teil 2

es geht weiter mit dem Programmieren unter WarpOS

INTERN


Hi!

Kurs-Fortsetzung:

- OS-Calls die oft pro Sekunde aufgerufen werden

Wer diese drei Dinge nicht beachtet, kann u.U. ein PPC-Programm erzeugen, dass langsamer als auf einem 68k ist. Dies sind uebrigens die einzigen Dinge in diesem Kurs, die fuer beide PPC-Kernel gelten, den von H&P und den von Phase 5.

Die Liste der zu vermeidenden Dinge ist sicher auch nicht vollstaendig. Denken beim Programmieren !!!

Ein wenig im Verdacht, einen Kontextswitch zu verwenden, habe ich die Standard-C-Funktion clock(). Anbei Ersatzcode (aus ZhaDoom):

double tb_scale_lo = ((double)(bus_clock >> 2)) / 35.0;
double tb_scale_hi = (4.294967296E9 / (double)(bus_clock >> 2)) * 35.0;

Hierbei wird bus_clock auf den Bus-Clock des Boards gesetzt, z.B. 50000000 fuer 50 MHz.

Zeitmessung: (Im Beispiel fuer 70tel-Sekunden Einheiten, wie bei Doom):

int I_GetTime (void)
{
 unsigned int clock[2];
 double currtics;
 static double basetics=0.0;
        ppctimer (clock);
 if (basetics == 0.0)
basetics = ((double) clock[0])*tb_scale_hi + ((double) clock[1])/tb_scale_lo;
currtics = ((double) clock[0])*tb_scale_hi + ((double) clock[1])/tb_scale_lo;
return (int) (currtics-basetics);
}

ppctimer sieht *so* aus (Leute, die kein StormPowerASM haben, bitte mir schreiben, dann maile ich ihnen den Objekt-Code der Funktion zu...):

 vea
 XDEF    _ppctimer

_ppctimer:      mftbu   r4
                mftbl   r5
                mftbu   r6
                cmpw    r4,r6
                bne     _ppctimer

                stw     r4,0(r3)
                stw     r5,4(r3)
                blr

So, das wars eigentlich. Es folgt nur noch eine Liste moeglicher (aber absolut optionaler) Optimierungen:

  • Video-Buffer als Noncachable deklarieren (siehe AllocVecPPC in den WarpOS
    Docs). Bringt vor Allem z.B. bei Doom, dass 640x480 nicht an den Waenden
    ruckt.
  • PPC Assembler Teile (ich empfehle die Verwendung des StormC-Profilers zur
    Messung, welche Programm-Teile die meiste Rechenzeit verbraten)

Es sei darauf hingewiesen, dass eine Aufteilung der Arbeit in Tasks fuer den PPC und den 68k

- nichts bringt (zumindest nicht, wenn die beiden Tasks kommunizieren muessen),
und das ist kein Problem von WarpUP, es ist ein Problem der Hardware
- Nachteile haben wird, sobald AmigaPPC auf reinen PPC-Systemen mit 68k
Emulation basieren wird
- Fehleranfaellig ist

Wer sich dennoch nicht davor warnen lassen will, sei auf das AllocXMsg-System von WarpUP vermieden. Damit kann man (u.a.) so etwas machen.



Zurück zum Inhalt

Fun Time ©1998