<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!