Heim  >  Artikel  >  Optimieren Sie die Android-Java-Schleife und kopieren Sie einige Arrays, deren Elemente basierend auf dem FloatBuffer-Maskenarray auf Null gesetzt werden

Optimieren Sie die Android-Java-Schleife und kopieren Sie einige Arrays, deren Elemente basierend auf dem FloatBuffer-Maskenarray auf Null gesetzt werden

王林
王林nach vorne
2024-02-06 09:06:031155Durchsuche
<div class="wenti">Frageninhalt</div> <br><p>Ich habe eine Funktion wie unten in Android, sie ist etwas langsam und stellt den Engpass meiner Echtzeitanwendung dar. Ich denke darüber nach, es irgendwie schneller zu machen, vielleicht über GPU oder eine andere mögliche Methode. Welche Möglichkeiten gibt es, die Parallelisierung zu nutzen, um sie schneller und effizienter zu machen? </p> <pre class="brush:php;toolbar:false;">private int[] getArray (ByteBuffer byteBuffer) { int[] array = new int[width * height]; FloatBuffer fb = byteBuffer.asFloatBuffer(); for (int i = 0; i < width* height; i++) { float probability = 1 - floatBuffer.get(); if (probability > 0.9) { array[i] = originalBuffer[i]; } } return array; }</pre> <p>Kontext wird zum Segmentieren von Aufgaben verwendet. Grundsätzlich gibt das ml-Modell eine Maske in einem Bytepuffer zurück. Ich übergebe es an diese Funktion, um den Hintergrund rosa zu machen. Dies dient nur als Referenz. </p> <br><h2 class="daan">Richtige Antwort</h2> <br><p> (Kommentar ist zu lang), aber Sie können es ganz einfach machen: Ersetzen Sie </p> <pre class="brush:php;toolbar:false;">float probability = 1 - floatbuffer.get(); if (probability > 0.9) {</pre> <p>Von </p> <pre class="brush:php;toolbar:false;">if (floatbuffer.get() < 0.1) {</pre> <p>Außerdem: Ich weiß ehrlich gesagt nicht, ob der Compiler einen Maschinencode geschrieben hat, um <code>width*height</code> das Abbruchkriterium in <strong>jeder </strong> Schleife zu berechnen (ich hoffe/glaube <strong>nicht </strong>) >). Aber probieren Sie es aus: Fügen Sie diese Zeile hinzu </p> <pre class="brush:php;toolbar:false;">int product = width*height; int[] array = new int[product];</pre> <p>Dann einrichten</p> <pre class="brush:php;toolbar:false;">for (int i = 0; i < product; i++) {</pre> <p>Auf diese Weise eliminieren Sie alle arithmetischen Operationen in der Schleife (außer den wesentlichen <code>i++</code> 和 <code><</code>). </p>

Das obige ist der detaillierte Inhalt vonOptimieren Sie die Android-Java-Schleife und kopieren Sie einige Arrays, deren Elemente basierend auf dem FloatBuffer-Maskenarray auf Null gesetzt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen