blob: ea2bfd21d061fd880bdab70063c23d9bcfbe114d [file] [log] [blame]
#include "halide_buffer.h"
template<typename T>
T rand_value() {
return (T)(rand() * 0.125) - 100;
}
template<typename T>
buffer_t make_buffer(int w, int h) {
T *mem = new T[w*h];
buffer_t buf = {0};
buf.host = (uint8_t *)mem;
buf.extent[0] = w;
buf.extent[1] = h;
buf.elem_size = sizeof(T);
buf.stride[0] = 1;
buf.stride[1] = w;
for (int i = 0; i < w*h; i++) {
mem[i] = rand_value<T>();
}
return buf;
}
int main(int argc, char **argv) {
unsigned int err_code = 0;
#if (!__has_builtin(__builtin_cpu_supports) && (defined(__i386__) || defined(__x86_64__)))
return err_code;
#endif
#if defined(__i386__) || defined(__x86_64__)
if (!__builtin_cpu_supports("avx")) {
return err_code;
}
#endif
time_t seed;
if (argc > 1) {
seed = atoi(argv[1]);
}
else {
seed = time(NULL);
srand (seed);
}
const int W = 256, H = 256;
// Make some input buffers
buffer_t bufs[] = {
make_buffer<int32_t>(W, H),
make_buffer<int32_t>(W, H),
make_buffer<int32_t>(W, H)
};
for (int i = 0; i < 24; i++) {
filter f = filters[i];
f.fn(bufs + 0,
bufs + 1,
bufs + 2);
}
for (int i = 0; i < sizeof(bufs)/sizeof(buffer_t); i++) {
delete[] bufs[i].host;
}
return err_code;
}