Home > Java > body text

Optimize the Android Java loop and copy some arrays whose elements are zeroed based on the FloatBuffer mask array

王林
Release: 2024-02-06 09:06:03
forward
1164 people have browsed it
<div class="wenti">Question content</div> <br><p>I have a function in android as shown below, it is a bit slow and is the bottleneck of my real time application. I'm thinking of making it faster somehow, maybe via gpu or any possible method. What are some ways to use parallelization to make it faster and more efficient? </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Copy after login</div></div> <p>Context is used to split tasks. Basically, the ml model returns a mask in a byte buffer. I pass it to this function to make the background pink. This is for reference only. </p><br/><h2 class="daan">Correct Answer</h2><br/><p> (Comment is too long) But you can do it easily: Replace </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">float probability = 1 - floatbuffer.get(); if (probability > 0.9) {</pre><div class="contentsignin">Copy after login</div></div> <p>Depend on</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">if (floatbuffer.get() < 0.1) {</pre><div class="contentsignin">Copy after login</div></div> <p> And: I honestly don't know if the compiler wrote a machine code to calculate <code>width*height</code> to calculate the abort criterion in <strong> each </strong> loop (I hope/think<strong>no</strong) >). But try it: add this line </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">int product = width*height; int[] array = new int[product];</pre><div class="contentsignin">Copy after login</div></div> <p>Then set up</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">for (int i = 0; i < product; i++) {</pre><div class="contentsignin">Copy after login</div></div> <p>This way you eliminate all arithmetic operations in the loop (except the essential <code>i </code> and <code><</code>). </p>

The above is the detailed content of Optimize the Android Java loop and copy some arrays whose elements are zeroed based on the FloatBuffer mask array. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template