Hallo Gemeinde, ich versuche gerade eine Implementierung eines SID-Chips entsprechend der Datenblaetter auf einem Atmega32 (wie sicherlich viele vor mir). Nun habe ich ein Performance-Problem bei der Envelope-Berechnung. Da der SID mit einem sehr weiten Dauernbereich (2ms-8000ms, resp. 6ms - 24000ms) arbeitet, und ich der Kompatibilitaet halber die Registerwerte nicht streichen moechte, komme ich bei der Berechnung unguenstiger Konstellationen (geringe Lautstaerkeveraenderung ueber sehr lange Zeiten) an die Grenzen des 16Bit-Raumes. Loesen kann ich das Problem, in dem ich in den 32Bit-Zahlenraum gehe. Dieses scheint aber bei der Verwendung von mehr als 2 Oszillatoren, SPI-Ansteuerung, Huellkurven und einer DDS-Tastrate von 8kHz nicht mehr zu klappen. Die Wavetables werden im Ram gehalten und sollten nicht allzusehr bremsen. Weiss einer von euch, wie performant die Verarbeitung von 32Bit Integern im Atmega ist? Vielleicht auch im Vergleich zu 16Bit Zahlen? Waehre die Verwendung von Float-Multiplikationen letztlich schneller? Bislang muss der Atmega nur 8- oder 16Bit-Zahlen verarbeiten und eben 3 32Bit-Multiplikationen pro 1/8000s durchfuehren. Getaktet wird mit 16MHz. Ich waere fuer einen Tipp dankbar. Mit Gruss Mike
ich geb dir nen tipp. schau dir mal den assembler output von deinem c compiler an und teste verschiedene arten der berechnung. im assemblercode kannst du dann genau sehen, wie eine 32 bit multiplikation aussieht und in etwa abschaetzen um welchen faktor sie langsamer ist als die 16er variante
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.