Rechenleistung CPU bricht ein

  • 9 Antworten
  • Neuester Beitrag
Diskutiere Rechenleistung CPU bricht ein im Android App Entwicklung im Bereich Betriebssysteme & Apps.
GENiALi

GENiALi

Fortgeschrittenes Mitglied
Hallo

Ich habe hier einen Service der lange läuft und dabei rechnet. Wenn alles gut läuft macht ein Note 2 etwa 4000 Berechnungen in der Sekunde. Wenn ich dann das Display ausschalte rechnet das Teil etwa 3 Minuten so weiter. Danach sinkt die Rechenleistung immer mehr. Bis etwa 1000 Berechnungen und bleibt dort stehen. Ich habe die Logik aber in einem WakeLock eingepackt.

Code:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
 wl.acquire();
   ..screen will stay on during this section..
 wl.release();
Wie verhindert man erfolgreich das die Rechenleistung so massiev einbricht? Bei einem S3 ist es noch viel krasser. Starten mit 3000 Berechnungen, nach 7 Minuten noch 900. :-(
 
Zuletzt bearbeitet:
reneph

reneph

Dauergast
Arbeitest du mit Multithreading? Also kann man davon ausgehen, dass bei 4000 Berechnungen/Sek alle 4 Kerne und bei 1000 nur noch 1 Kern arbeitet?

Ich vermute fast, dass du daran nicht viel ändern kannst. Du erhältst das Gerät am Leben per Wakelock.
Sobald der Screen aus geht bzw. händisch ausgeschalten wird, gibt es Logiken in Kernels (weiß nicht, wie es bei Samsung ist), dass bei Screen-Off anders getaktet wird, Limits für die maximale Anzahl an genutzter Cores existieren etc. Deshalb vermute (!) ich, dass du eben in eine solche Kernel-Funktion zum Stromsparen bei Screen-Off rein läufst.
 
GENiALi

GENiALi

Fortgeschrittenes Mitglied
reneph schrieb:
Arbeitest du mit Multithreading? Also kann man davon ausgehen, dass bei 4000 Berechnungen/Sek alle 4 Kerne und bei 1000 nur noch 1 Kern arbeitet?
Die Rate sinkt kontinuierlich ab. Ich denke da taktet die CPU runter. Sobald ich den Monitor einschalte kommt die wieder hoch. Das ist irgend wie hässlich für eine App die auf Rechenleistung angewiesen ist. :-/
 
reneph

reneph

Dauergast
Ja, aber mehr als Wakelock, der auch den Screen aktiv hält, kannst du da nicht machen.
 
GENiALi

GENiALi

Fortgeschrittenes Mitglied
Erstaunlicherweise gibt mir ein
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1600000 aus wenn die Rechenleistung so tief ist.
 
J

JustinTime

Fortgeschrittenes Mitglied
Was berechnest du denn da so großes? So lange Berechnungen sind ja nicht gerade alltäglich.
 
ui_3k1

ui_3k1

Gesperrt
Hehe, am See in der heißen Sommer-Sonne kollabiert das System dann vollkommen. Willst du mit deiner Anwendung einen Belastungstest für die Hersteller entwerfen? :D

Würde mich auch mal interessieren was da so extrem viele Berechnungen benötigt.
Vielleicht lässt sich das "Problem" ja auch anders lösen.
 
GENiALi

GENiALi

Fortgeschrittenes Mitglied
Ah, ich berchne Hashes. Ein CPU Miner gebaut. Ziel soll sein das der automatisch anläuft wenn man ein USB einstöpselt. Endziel soll ein Miner sein der einfach alles besser macht als die die zur Zeit im Playtore sind.
 
ui_3k1

ui_3k1

Gesperrt
Wirklich gut auskennen tue ich mich auf dem Gebiet leider nicht, aber meines Wissens...
-wird es da schwierig mit Codeoptimierung.
-sind die Smartphones CPUs bauartbedingt wohl auch nicht allzu gut dazu geeignet.

Ist aber trotzdem eine interessante Idee...
 
GENiALi

GENiALi

Fortgeschrittenes Mitglied
Na ja. Mein I7 im Laptop bringt pro Core soviel wie ein aktuelles Android. 3-4KH/s.
Bei 8 Cores müsste ich also in etwa 8 Androiden nehmen. Wer ein paar Geräte rumliegen hat kommt mit wenig Energie zu einem Miner den er rumliegen lassen kann ohne das Krach entsteht. :)