#include <stdio.h>
#include <math.h>
#include <cstdlib>
static int samples = 20e6;
static double pi_device()
{
return 4.0 * sum<float>(
sqrt(x*x + y*y) < 1) / samples;
}
static double pi_host()
{
for (int i = 0; i < samples; ++i) {
float x = float(rand()) / RAND_MAX;
float y = float(rand()) / RAND_MAX;
count++;
}
return 4.0 * count / samples;
}
static void device_wrapper() { pi_device(); }
static void host_wrapper() { pi_host(); }
int main(int argc, char ** argv)
{
try {
int device = argc > 1 ? atoi(argv[1]) : 0;
printf(
"device: %.5f seconds to estimate pi = %.5f\n",
timeit(device_wrapper), pi_device());
printf(
" host: %.5f seconds to estimate pi = %.5f\n",
timeit(host_wrapper), pi_host());
fprintf(stderr,
"%s\n", e.
what());
throw;
}
return 0;
}