Copy Link
Add to Bookmark
Report

Fun Time: PowerPC Kurs Teil 2

eZine's profile picture
Published in 
Fun Time
 · 11 May 2019

PowerPC Kurs Teil 2

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.


So, dann hab ich doch den ganzen Kurs schon niedergeschrieben :) Kannst es ja in einzelne Haeppchen zerteilen. Infos ueber Mixed Binaries und das Schreiben von PPC Shared Libs fehlen noch, wenn Du willst, reich ich die nach...

Steffen

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT