forked from dillonhuff/clockwork
-
Notifications
You must be signed in to change notification settings - Fork 0
/
brighten_blur.cpp
50 lines (42 loc) · 1.92 KB
/
brighten_blur.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "example_progs.h"
prog brighten_blur() {
prog prg;
prg.compute_unit_file = "clockwork_standard_compute_units.h";
prg.name = "brighten_blur";
prg.add_input("off_chip_input");
prg.add_output("off_chip_output");
prg.buffer_port_widths["off_chip_input"] = 16;
prg.buffer_port_widths["in"] = 16;
prg.buffer_port_widths["brightened"] = 16;
prg.buffer_port_widths["blurred"] = 16;
prg.buffer_port_widths["off_chip_output"] = 16;
int input_image_rows = 256;
int input_image_cols = 256;
// testing
// Actually you dont have to fill these
// buffer bounds in. I am just adding them for completeness.
prg.buffer_bounds["off_chip_input"] = {input_image_cols, input_image_rows};
prg.buffer_bounds["in"] = {input_image_cols, input_image_rows};
prg.buffer_bounds["brightened"] = {input_image_cols, input_image_rows};
prg.buffer_bounds["blurred"] = {input_image_cols - 2, input_image_rows - 2};
prg.buffer_bounds["off_chip_output"] = {input_image_cols - 2, input_image_rows - 2};
auto p = prg.add_nest("po", 0, input_image_rows, "pi", 0, input_image_cols);
auto write = p->add_op("load_image_from_off_chip");
write->add_load("off_chip_input", "pi, po");
write->add_store("in", "pi, po");
auto br = prg.add_nest("bo", 0, input_image_rows, "bi", 0, input_image_cols);
auto scale = br->add_op("brighten_image");
scale->add_function("multiply_by_two");
scale->add_load("in", "bi, bo");
scale->add_store("brightened", "bi, bo");
auto blr = prg.add_nest("y", 0 , input_image_rows, "x", 0, input_image_cols);
auto blur = blr->add_op("blur_image");
blur->add_function("inc");
blur->add_load("brightened", "x","y");
blur->add_store("blurred", "x","y");
auto write_out = prg.add_nest("m", 0, input_image_rows, "n", 0, input_image_cols);
auto write_op = write_out->add_op("write_blurred_off_chip");
write_op->add_load("blurred", "n, m");
write_op->add_store("off_chip_output", "n, m");
return prg;
}