#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;
}
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;
}
A multi dimensional data container.
Definition: array.h:27
Definition: exception.h:20
virtual const char * what() const
Definition: exception.h:34
@ f32
32-bit floating point values
Definition: defines.h:196
AFAPI array sqrt(const array &in)
C++ Interface for square root of input.
AFAPI array randu(const dim4 &dims, const dtype ty=f32)
AFAPI void setDevice(const int device)
Sets the current device.
AFAPI array count(const array &in, const int dim=-1)
C++ Interface for counting non-zero values in an array.
Definition: algorithm.h:15
AFAPI double timeit(void(*fn)())