A high-performance general-purpose compute library
benchmarks/blas.cpp
/*******************************************************
* Copyright (c) 2014, ArrayFire
* All rights reserved.
*
* This file is distributed under 3-clause BSD license.
* The complete license agreement can be obtained at:
* http://arrayfire.com/licenses/BSD-3-Clause
********************************************************/
#include <arrayfire.h>
#include <math.h>
#include <stdio.h>
#include <cstdlib>
#include <string>
using namespace af;
// create a small wrapper to benchmark
static array A; // populated before each timing
static void fn() {
array B = matmul(A, A); // matrix multiply
}
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");
const af_dtype dt = (dtype == "f16" ? f16 : 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); // time in seconds
double gflops = 2.0 * powf(n, 3) / (time * 1e9);
if (gflops > peak) peak = gflops;
printf(" %4.0f Gflops\n", gflops);
fflush(stdout);
}
} catch (af::exception& e) {
fprintf(stderr, "%s\n", e.what());
throw;
}
printf(" ### peak %g GFLOPS\n", peak);
return 0;
}
A multi dimensional data container.
Definition array.h:37
An ArrayFire exception class.
Definition exception.h:22
virtual const char * what() const
Returns an error message for the exception in a string format.
Definition exception.h:46
af_dtype
Definition defines.h:210
@ f32
32-bit floating point values
Definition defines.h:211
@ f16
16-bit floating point value
Definition defines.h:228
AFAPI array matmul(const array &lhs, const array &rhs, const matProp optLhs=AF_MAT_NONE, const matProp optRhs=AF_MAT_NONE)
C++ Interface to multiply two matrices.
array constant(T val, const dim4 &dims, const dtype ty=(af_dtype) dtype_traits< T >::ctype)
C++ Interface to generate an array with elements set to a specified value.
AFAPI bool isHalfAvailable(const int device)
Queries the current device for half precision floating point support.
AFAPI void info()
AFAPI void setDevice(const int device)
Sets the current device.
Definition algorithm.h:15
AFAPI double timeit(void(*fn)())
af_dtype dtype
Definition defines.h:556