ArrayFire: benchmarks/blas.cpp (original) (raw)

#include <math.h>

#include <stdio.h>

#include

#include

using namespace af;

static array A;

static void fn() {

array B = matmul(A, A);

}

int main(int argc, char** argv) {

double peak = 0;

try {

int device = argc > 1 ? atoi(argv[1]) : 0;

setDevice(device);

const std::string dtype(argc > 2 ? argv[2] : "f32");

if (dt == f16)

printf("Device %d isHalfAvailable ? %s\n", device,

isHalfAvailable(device) ? "yes" : "no");

info();

printf("Benchmark N-by-N matrix multiply at %s \n", dtype.c_str());

for (int n = 128; n <= 2048; n += 128) {

printf("%4d x %4d: ", n, n);

A = constant(1, n, n, dt);

double time = timeit(fn);

double gflops = 2.0 * powf(n, 3) / (time * 1e9);

if (gflops > peak) peak = gflops;

printf(" %4.0f Gflops\n", gflops);

fflush(stdout);

}

fprintf(stderr, "%s\n", e.what());

throw;

}

printf(" ### peak %g GFLOPS\n", peak);

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

@ f16

16-bit floating point value