/* Apply a large Gaussian-approximation kernel as a Hogenauer filter * for benchmarking purposes. Handles one sample per 1.6 ns: 6.7 * seconds for 1 million iterations of blurring 4096 samples with GCC * 4.7.2 -O3 on a Core i7-3840QM. */ #include #include enum {lag = 256, image_size = 4096}; unsigned long buf[image_size] = {0}; int main(int argc, char **argv) { size_t n = atoi(argv[1]); buf[image_size/2] = 1; for (size_t j = 0; j < n; j++) { for (size_t i = 0; i < image_size - 3 * lag - 3; i++) { buf[i + 3 * lag + 2] += buf[i + 3 * lag + 1]; buf[i + 3 * lag + 1] += buf[i + 3 * lag]; buf[i + 3 * lag] += buf[i + 3 * lag - 1]; buf[i + 2 * lag] -= buf[i + 3 * lag]; buf[i + lag] -= buf[i + 2 * lag]; buf[i] = buf[i + lag] - buf[i]; } } for (size_t i = 0; i < image_size - 3 * lag - 3; i++) { if (i) printf((i%8) ? ", " : ",\n"); printf("%6ld", buf[i]); } printf("\n"); return 0; }