-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConstants.py
More file actions
executable file
·154 lines (128 loc) · 4.66 KB
/
Constants.py
File metadata and controls
executable file
·154 lines (128 loc) · 4.66 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import os
# Where is GemForge
GEM_FORGE_TRANSFORM_PATH = os.getenv('GEM_FORGE_TRANSFORM_PATH')
assert(GEM_FORGE_TRANSFORM_PATH is not None)
GEM_FORGE_TRANSFORM_BUILD_PATH = os.path.join(GEM_FORGE_TRANSFORM_PATH, 'build')
GEM_FORGE_DRIVER_PATH = os.path.join(GEM_FORGE_TRANSFORM_PATH, '../driver')
GEM_FORGE_BENCHMARK_PATH = os.path.join(GEM_FORGE_TRANSFORM_PATH, 'benchmark')
GEM_FORGE_TOP_PATH = os.getenv('GEM_FORGE_TOP')
AFFINITY_ALLOC_INC_PATH = os.path.join(GEM_FORGE_TOP_PATH, 'lib/affinity_alloc')
AFFINITY_ALLOC_LIB_PATH = os.path.join(GEM_FORGE_TOP_PATH, 'lib/affinity_alloc/build')
# Where to find AOCL
AOCL_INC_PATH = os.path.join(GEM_FORGE_TOP_PATH, 'build/include/blis')
AOCL_LIB_PATH = os.path.join(GEM_FORGE_TOP_PATH, 'build/lib')
# Where to store the llvm_bc and traces.
EXPERIMENTS = 'stream'
# EXPERIMENTS = 'fractal'
GEM_FORGE_RESULT_PATH = os.path.join(
os.getenv('GEM_FORGE_RESULT_PATH'), EXPERIMENTS)
LLVM_TDG_REPLAY_C = os.path.join(GEM_FORGE_DRIVER_PATH, 'replay.c')
"""
Normal llvm install path.
"""
LLVM_PATH = os.getenv('LLVM_RELEASE_INSTALL_PATH')
assert(LLVM_PATH is not None)
LLVM_BIN_PATH = os.path.join(LLVM_PATH, 'bin')
LLVM_LIB_PATH = os.path.join(LLVM_PATH, 'lib')
LLVM_DEBUG_PATH = os.getenv('LLVM_DEBUG_INSTALL_PATH')
LLVM_DEBUG_BIN_PATH = os.path.join(LLVM_DEBUG_PATH, 'bin')
PERF_BIN = os.getenv('PERF_BIN')
if PERF_BIN is None:
PERF_BIN = 'perf'
"""
GEM5_PATH
"""
GEM5_DIR = os.getenv('GEM_FORGE_GEM5_PATH')
GEM5_INCLUDE_DIR = os.path.join(GEM5_DIR, 'include')
GEM5_X86 = os.path.join(GEM5_DIR, 'build/X86/gem5.opt')
GEM5_RISCV = os.path.join(GEM5_DIR, 'build/RISCV/gem5.opt')
GEM5_LLVM_TRACE_SE_CONFIG = os.path.join(
GEM5_DIR, 'configs/example/gem_forge/run.py')
GEM5_SE_CONFIG = os.path.join(
GEM5_DIR, 'configs/example/se.py')
GEM5_M5OPS_X86 = os.path.join(GEM5_DIR, 'util', 'm5', 'm5op_x86.S')
GEM5_M5OPS_RISCV = os.path.join(GEM5_DIR, 'util', 'm5', 'm5op_riscv.S')
GEM5_M5OPS_EMPTY = os.path.join(GEM5_DIR, 'util', 'm5', 'm5op_empty.cpp')
DRAMSIM3_DIR = os.path.join(GEM5_DIR, 'ext/dramsim3/DRAMsim3')
M5_THREADS_LIB = os.getenv('M5_THREADS_LIB')
"""
Gem5 parameters.
"""
# CPU_TYPE = 'DerivO3CPU'
# CPU_TYPE = 'TimingSimpleCPU'
CPU_TYPE = 'MinorCPU'
STORE_QUEUE_SIZE = 32
GEM5_USE_MCPAT = 0
OPT = os.path.join(LLVM_DEBUG_BIN_PATH, 'opt')
CC = os.path.join(LLVM_BIN_PATH, 'clang')
CXX = os.path.join(LLVM_BIN_PATH, 'clang++')
LLVM_LINK = os.path.join(LLVM_BIN_PATH, 'llvm-link')
LLVM_DIS = os.path.join(LLVM_BIN_PATH, 'llvm-dis')
LLVM_OBJDUMP = os.path.join(LLVM_BIN_PATH, 'llvm-objdump')
# We may need DEBUG compiler.
CC_DEBUG = os.path.join(LLVM_DEBUG_BIN_PATH, 'clang')
CXX_DEBUG = os.path.join(LLVM_DEBUG_BIN_PATH, 'clang++')
LLVM_OBJDUMP_DEBUG = os.path.join(LLVM_DEBUG_BIN_PATH, 'llvm-objdump')
# Some one installed a wrong version of protobuf on my computer.
# PROTOBUF_LIB = os.getenv('LIBPROTOBUF_STATIC_LIB')
# if PROTOBUF_LIB is None:
# print('Missing env var LIBPROTOBUF_STATIC_LIB')
# assert(False)
PROTOBUF_LIB = '-lprotobuf'
LIBUNWIND_LIB = '-lunwind'
# Additional path to look for libstdc++.
LIBSTDCXX_SYSTEM = os.getenv('LIBSTDCXX_SYSTEM')
LIBSTDCXX_INCLUDE = os.getenv('LIBSTDCXX_INCLUDE')
LIBSTDCXX_LIBRARY = os.getenv('LIBSTDCXX_LIBRARY')
ISA = 'x86'
# ISA = 'riscv'
def get_native_cxx_compiler(CXX):
if LIBSTDCXX_SYSTEM is None:
return [CXX]
return [
CXX,
'-isystem={S}'.format(S=LIBSTDCXX_SYSTEM),
'-I{S}'.format(S=LIBSTDCXX_INCLUDE),
'-L{S}'.format(S=LIBSTDCXX_LIBRARY),
]
def get_sim_compiler(compiler):
if ISA == 'x86':
return [compiler]
if ISA == 'riscv':
return [
compiler,
'--target=riscv64-unknown-linux-gnu',
'-march=rv64g',
'-mabi=lp64d',
]
def get_sim_linker():
"""
Get the linker to generate binary for gem5 simulation.
"""
if ISA == 'x86':
# Simply use native clang++ to link.
return get_native_cxx_compiler(CXX)
if ISA == 'riscv':
# Clang support for linking RISCV is not working.
# Use the cross compiler of g++.
RISCV_GNU_INSTALL_PATH = os.getenv('RISCV_GNU_INSTALL_PATH')
assert(RISCV_GNU_INSTALL_PATH is not None)
return [
os.path.join(RISCV_GNU_INSTALL_PATH,
'bin/riscv64-unknown-linux-gnu-g++'),
'-march=rv64g',
'-mabi=lp64d',
]
def get_gem5_m5ops():
if ISA == 'x86':
return GEM5_M5OPS_X86
if ISA == 'riscv':
return GEM5_M5OPS_RISCV
def get_gem5(gem5_variant='opt'):
gem5 = GEM5_X86
if ISA == 'x86':
gem5 = GEM5_X86
if ISA == 'riscv':
gem5 = GEM5_RISCV
gem5 = f'{gem5[:-4]}.{gem5_variant}'
return gem5