#include <stdio.h>
#include <cstdlib>
 
 
 
static float h_dx[]     = {1.f / 12, -8.f / 12, 0, 8.f / 12,
                           -1.f / 12};  
static float h_spread[] = {1.f / 5, 1.f / 5, 1.f / 5, 1.f / 5, 1.f / 5};
static array dx, spread, kernel;  
 
 
static array full_out, dsep_out, hsep_out;  
 
static void full() { full_out = 
convolve2(img, kernel); }
 
static void dsep() { dsep_out = 
convolve(dx, spread, img); }
 
 
}
 
int main(int argc, char **argv) {
    try {
        int device = argc > 1 ? atoi(argv[1]) : 0;
 
        
        spread = 
array(1, 5, h_spread);  
 
        printf(
"full 2D convolution:         %.5f seconds\n", 
timeit(full));
        printf(
"separable, device pointers:  %.5f seconds\n", 
timeit(dsep));
 
        
        if (fail(full_out, dsep_out)) { 
throw af::exception(
"full != dsep"); }
 
 
    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.
array abs(const array &in)
C++ Interface to calculate the absolute value.
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.
void setDevice(const int device)
Sets the current device.
array randu(const dim4 &dims, const dtype ty, randomEngine &r)
C++ Interface to create an array of random numbers uniformly distributed.
array max(const array &in, const int dim=-1)
C++ Interface to return the maximum along a given dimension.
array convolve2(const array &signal, const array &filter, const convMode mode=AF_CONV_DEFAULT, const convDomain domain=AF_CONV_AUTO)
C++ Interface for convolution on two dimensional signals.
array convolve(const array &signal, const array &filter, const convMode mode=AF_CONV_DEFAULT, const convDomain domain=AF_CONV_AUTO)
C++ Interface for convolution any(one through three) dimensional signals.
double timeit(void(*fn)())