-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
140 lines (117 loc) · 4.73 KB
/
Copy pathMakefile
File metadata and controls
140 lines (117 loc) · 4.73 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
.PHONY: all help clean
.PHONY: design-p design-i design-d
.PHONY: bitstream-p bitstream-i bitstream-d
.PHONY: $(PROGRAM)-seq $(PROGRAM)-p $(PROGRAM)-i $(PROGRAM)-d
all: help
PROGRAM_ = nbody
PROGRAM_SRC = \
src/common/common.c \
src/blocking/common/common_utils.c \
src/blocking/fpga/utils.c \
src/blocking/fpga/main.c \
src/blocking/fpga/solver_ompss.c
help:
@echo 'Supported targets: $(PROGRAM_)-p, $(PROGRAM_)-i, $(PROGRAM_)-d, $(PROGRAM_)-seq, design-p, design-i, design-d, bitstream-p, bitstream-i, bitstream-d, clean, help'
@echo 'FPGA env. variables: BOARD, FPGA_CLOCK, FPGA_MEMORY_PORT_WIDTH, MEMORY_INTERLEAVING_STRIDE, SIMPLIFY_INTERCONNECTION, INTERCONNECT_OPT, INTERCONNECT_REGSLICE, FLOORPLANNING_CONSTR, SLR_SLICES, PLACEMENT_FILE'
@echo 'Benchmark env. variables: BIGO, NBODY_BLOCK_SIZE, NBODY_NCALCFORCES, NBODY_NUM_FBLOCK_ACCS'
@echo 'Compiler env. variables: CFLAGS, CROSS_COMPILE, LDFLAGS'
CLANG_TARGET =
ifdef CROSS_COMPILE
CLANG_TARGET += -target $(CROSS_COMPILE)
endif
COMPILER_ = clang
COMPILER_FLAGS_ = $(CFLAGS) $(CLANG_TARGET) -fompss-2 -fompss-fpga-wrapper-code
COMPILER_FLAGS_I_ = -fompss-fpga-instrumentation
COMPILER_FLAGS_D_ = -g -fompss-fpga-hls-tasks-dir $(PWD)
LINKER_FLAGS_ = $(LDFLAGS)
AIT_FLAGS__ = --name=$(PROGRAM_) --board=$(BOARD) -c=$(FPGA_CLOCK)
AIT_FLAGS_DESIGN__ = --to_step=design
AIT_FLAGS_D__ = --debug_intfs=both -k -i -v
# Optional FPGA optimization variables
ifdef FPGA_MEMORY_PORT_WIDTH
COMPILER_FLAGS_ += -fompss-fpga-memory-port-width $(FPGA_MEMORY_PORT_WIDTH)
endif
ifdef USER_CONFIG
AIT_FLAGS__ += --user_config=config_files/$(USER_CONFIG).json
endif
ifdef MEMORY_INTERLEAVING_STRIDE
AIT_FLAGS__ += --memory_interleaving_stride=$(MEMORY_INTERLEAVING_STRIDE)
endif
ifdef INTERCONNECT_PRIORITIES
AIT_FLAGS__ += --interconnect_priorities
endif
ifdef INTERCONNECT_REGSLICES
AIT_FLAGS__ += --interconnect_regslices
endif
ifdef DISABLE_STATIC_CONSTRAINTS
AIT_FLAGS__ += --disable_static_constraints
endif
ifdef AIT_EXTRA_FLAGS
AIT_FLAGS__ += $(AIT_EXTRA_FLAGS)
endif
## N-body specifics
# Parameters
FPGA_CLOCK ?= 200
FPGA_MEMORY_PORT_WIDTH ?= 128
BIGO ?= N2
NBODY_BLOCK_SIZE ?= 2048
NBODY_NCALCFORCES ?= 8
NBODY_NUM_FBLOCK_ACCS ?= 1
BS = $(NBODY_BLOCK_SIZE)
# Picos configuration
AIT_FLAGS__ += --max_deps_per_task=3 --max_args_per_task=11 --max_copies_per_task=11 --picos_tm_size=32 --picos_dm_size=102 --picos_vm_size=102
# Preprocessor flags
COMPILER_FLAGS_ += -DBOARD=\"$(BOARD)\" -DFPGA_MEMORY_PORT_WIDTH=$(FPGA_MEMORY_PORT_WIDTH) -DFPGA_CLOCK=$(FPGA_CLOCK)
COMPILER_FLAGS_ += -DBIGO=$(BIGO) -D_BIGO_$(BIGO) -DBLOCK_SIZE=$(BS) -DNBODY_BLOCK_SIZE=$(NBODY_BLOCK_SIZE) -DNBODY_NCALCFORCES=$(NBODY_NCALCFORCES) -DNBODY_NUM_FBLOCK_ACCS=$(NBODY_NUM_FBLOCK_ACCS)
# Linker flags
LINKER_FLAGS_ += -Isrc -lrt -lm
AIT_FLAGS_ = -fompss-fpga-ait-flags "$(AIT_FLAGS__)"
AIT_FLAGS_DESIGN_ = -fompss-fpga-ait-flags "$(AIT_FLAGS_DESIGN__)"
AIT_FLAGS_D_ = -fompss-fpga-ait-flags "$(AIT_FLAGS_D__)"
$(PROGRAM_)-p: $(PROGRAM_SRC)
$(COMPILER_) $(COMPILER_FLAGS_) $^ -o $@ $(LINKER_FLAGS_)
$(PROGRAM_)-i: $(PROGRAM_SRC)
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_I_) $^ -o $@ $(LINKER_FLAGS_)
$(PROGRAM_)-d: $(PROGRAM_SRC)
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_D_) $^ -o $@ $(LINKER_FLAGS_)
$(PROGRAM_)-seq: $(PROGRAM_SRC)
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_SEQ_) $^ -o $@ $(LINKER_FLAGS_)
design-p: $(PROGRAM_SRC)
$(eval TMPFILE := $(shell mktemp))
$(COMPILER_) $(COMPILER_FLAGS_) \
$(AIT_FLAGS_) $(AIT_FLAGS_DESIGN_) \
$^ -o $(TMPFILE) $(LINKER_FLAGS_)
rm $(TMPFILE)
design-i: $(PROGRAM_SRC)
$(eval TMPFILE := $(shell mktemp))
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_I_) \
$(AIT_FLAGS_) $(AIT_FLAGS_DESIGN_) \
$^ -o $(TMPFILE) $(LINKER_FLAGS_)
rm $(TMPFILE)
design-d: $(PROGRAM_SRC)
$(eval TMPFILE := $(shell mktemp))
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_D_) \
$(AIT_FLAGS_) $(AIT_FLAGS_DESIGN_) $(AIT_FLAGS_D_) \
$^ -o $(TMPFILE) $(LINKER_FLAGS_)
rm $(TMPFILE)
bitstream-p: $(PROGRAM_SRC)
$(eval TMPFILE := $(shell mktemp))
$(COMPILER_) $(COMPILER_FLAGS_) \
$(AIT_FLAGS_) \
$^ -o $(TMPFILE) $(LINKER_FLAGS_)
rm $(TMPFILE)
bitstream-i: $(PROGRAM_SRC)
$(eval TMPFILE := $(shell mktemp))
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_I_) \
$(AIT_FLAGS_) \
$^ -o $(TMPFILE) $(LINKER_FLAGS_)
rm $(TMPFILE)
bitstream-d: $(PROGRAM_SRC)
$(eval TMPFILE := $(shell mktemp))
$(COMPILER_) $(COMPILER_FLAGS_) $(COMPILER_FLAGS_D_) \
$(AIT_FLAGS_) $(AIT_FLAGS_D_) \
$^ -o $(TMPFILE) $(LINKER_FLAGS_)
rm $(TMPFILE)
clean:
rm -fv *.o $(PROGRAM_)-? $(PROGRAM_)_hls_automatic_clang.cpp ait_extracted.json
rm -frv $(PROGRAM_)_ait