#include <math.h>
#include <stdio.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());
} catch (exception& e) {
fprintf(stderr, "%s\n", e.what());
throw;
}
return 0;
}
@ f32
32-bit floating point values
AFAPI array sqrt(const array &in)
C++ Interface for square root of input.
AFAPI void setDevice(const int device)
Sets the current device.
static af::array array(af::dim4 idims, cl_mem buf, af::dtype type, bool retain=false)
Create an af::array object from an OpenCL cl_mem buffer.
AFAPI array randu(const dim4 &dims, const dtype ty, randomEngine &r)
AFAPI array count(const array &in, const int dim=-1)
C++ Interface for counting non-zero values in an array.
AFAPI double timeit(void(*fn)())