#include <math.h>
#include <stdio.h>
#include <cstdlib>
static int samples = 20e6;
static double pi_device() {
array x = randu(samples,
f32), y = randu(samples,
f32);
return 4.0 * sum<float>(sqrt(x * x + y * y) < 1) / samples;
}
static double pi_host() {
int count = 0;
for (int i = 0; i < samples; ++i) {
float x = float(rand()) / float(RAND_MAX);
float y = float(rand()) / float(RAND_MAX);
if (sqrt(x * x + y * y) < 1) 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;
}
A multi dimensional data container.
An ArrayFire exception class.
virtual const char * what() const
Returns an error message for the exception in a string format.
@ f32
32-bit floating point values
AFAPI void setDevice(const int device)
Sets the current device.
AFAPI array count(const array &in, const int dim=-1)
C++ Interface to count non-zero values in an array along a given dimension.
AFAPI double timeit(void(*fn)())