Rechenleistung CPU bricht ein

GENiALi

GENiALi

Fortgeschrittenes Mitglied
11
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:
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.
 
  • Danke
Reaktionen: GENiALi
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. :-/
 
Ja, aber mehr als Wakelock, der auch den Screen aktiv hält, kannst du da nicht machen.
 
Erstaunlicherweise gibt mir ein
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1600000 aus wenn die Rechenleistung so tief ist.
 
Was berechnest du denn da so großes? So lange Berechnungen sind ja nicht gerade alltäglich.
 
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.
 
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.
 
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...
 
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. :)
 

Ähnliche Themen

wernho
Antworten
11
Aufrufe
680
wernho
wernho
J
Antworten
5
Aufrufe
926
swa00
swa00
W
  • WuDiDong
Antworten
3
Aufrufe
766
jogimuc
J
Zurück
Oben Unten