<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>
<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>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>
<pre class="brush:php;toolbar:false;">float probability = 1 - floatbuffer.get();
if (probability > 0.9) {</pre>
<p>Depend on</p>
<pre class="brush:php;toolbar:false;">if (floatbuffer.get() < 0.1) {</pre>
<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>
<pre class="brush:php;toolbar:false;">int product = width*height;
int[] array = new int[product];</pre>
<p>Then set up</p>
<pre class="brush:php;toolbar:false;">for (int i = 0; i < product; i++) {</pre>
<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!