Sample Applications 351
float z0 = ∗( float∗)&encoding0 ;
float z1 = ∗( float∗)&encoding1 ;
float f0 = MyFunction( z0 );
float f1 = MyFunction( z1 );
if (f0∗ f1 <=0.0f)
{
roots . insert ( std :: abs( f0) <=std::abs(f1) ? z0 : z1);
}
z0 = −z0 ;
z1 = −z1 ;
f0 = MyFunction( z0 );
f1 = MyFunction( z1 );
if (f0∗ f1 <=0.0f)
{
roots . insert ( std :: abs( f0) <=std::abs(f1) ? z0 : z1);
}
}
}
}
LISTING 7.5: Root finding on the CPU using an exhaustive search with a
single thread.
The same approach for
double roots is a lot slower. Do not try this at home.
You have 2
32
times more numbers to process, so the total execution time is
on the order of 1430 years!
7.2.4.2 CPU Root Finding Using Multiple Threads
The exhaustive processing for finite
float numbers may be reduced by dis-
tributing ...