├── .gitignore ├── combine_compile_commands.py ├── envs.sh ├── .gitmodules ├── setup.sh ├── README.md ├── LICENSE ├── Makefile └── example └── Makefile /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | result/ 3 | 4 | private-envs.sh 5 | compile_commands.json 6 | -------------------------------------------------------------------------------- /combine_compile_commands.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import sys 4 | import json 5 | 6 | def get_key(entry): 7 | d = entry['directory'] 8 | f = entry['file'] 9 | return f if f.startswith('/') else os.path.join(d, f) 10 | 11 | all_commands = dict() 12 | # Read in new commands and update. 13 | for fn in sys.argv[1:]: 14 | if not os.path.isfile(fn): 15 | continue 16 | with open(fn) as f: 17 | commands = json.load(f) 18 | for e in commands: 19 | all_commands[get_key(e)] = e 20 | 21 | # Sort and output. Assume argv[1] is the out file. 22 | command_list = list(all_commands.values()) 23 | command_list.sort(key=lambda e: get_key(e)) 24 | with open(sys.argv[1], 'w') as f: 25 | json.dump(command_list, f, indent=2) -------------------------------------------------------------------------------- /envs.sh: -------------------------------------------------------------------------------- 1 | export GEM_FORGE_TOP=$(pwd) 2 | export CORES=$(nproc --all) 3 | # You can change this to store result to different place. 4 | export GEM_FORGE_RESULT_PATH=$GEM_FORGE_TOP/result 5 | export GEM_FORGE_BENCHMARK_PATH=$GEM_FORGE_TOP/benchmarks 6 | 7 | export LLVM_SRC_LIB_PATH=$GEM_FORGE_TOP/llvm/llvm/lib 8 | export LLVM_DEBUG_INSTALL_PATH=$GEM_FORGE_TOP/llvm/install-debug 9 | export LLVM_RELEASE_INSTALL_PATH=$GEM_FORGE_TOP/llvm/install-release 10 | export LIBUNWIND_INC_PATH=$GEM_FORGE_TOP/llvm/libunwind/include 11 | 12 | export GEM_FORGE_TRANSFORM_PATH=$GEM_FORGE_TOP/transform 13 | export GEM_FORGE_GEM5_PATH=$GEM_FORGE_TOP/gem5 14 | 15 | export PROTOBUF_INSTALL_PATH=$GEM_FORGE_TOP/build 16 | 17 | export PATH=$LLVM_RELEASE_INSTALL_PATH/bin:$PROTOBUF_INSTALL_PATH/bin:$PATH 18 | export CPATH=$PROTOBUF_INSTALL_PATH/include 19 | export LIBRARY_PATH=$PROTOBUF_INSTALL_PATH/lib 20 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "llvm"] 2 | path = llvm 3 | url = git@github.com:PolyArch/gem-forge-llvm.git 4 | [submodule "transform"] 5 | path = transform 6 | url = git@github.com:PolyArch/gem-forge-transform.git 7 | [submodule "gem5"] 8 | path = gem5 9 | url = git@github.com:PolyArch/gem-forge-gem5.git 10 | [submodule "lib/protobuf"] 11 | path = lib/protobuf 12 | url = git@github.com:protocolbuffers/protobuf.git 13 | [submodule "lib/binutils"] 14 | path = lib/binutils 15 | url = git://sourceware.org/git/binutils-gdb.git 16 | [submodule "benchmarks/gapbs"] 17 | path = benchmarks/gapbs 18 | url = git@github.com:PolyArch/gem-forge-gapbs.git 19 | [submodule "benchmarks/rodinia"] 20 | path = benchmarks/rodinia 21 | url = git@github.com:PolyArch/gem-forge-rodinia.git 22 | [submodule "lib/affinity_alloc"] 23 | path = lib/affinity_alloc 24 | url = git@github.com:PolyArch/gem-forge-affinity-alloc.git 25 | [submodule "driver"] 26 | path = driver 27 | url = git@github.com:PolyArch/gem-forge-script.git 28 | [submodule "lib/openlibm"] 29 | path = lib/openlibm 30 | url = git@github.com:JuliaMath/openlibm.git 31 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | echo "#" 2 | echo "######################## Build Protobuf #########################################" 3 | echo "#" 4 | cd $GEM_FORGE_TOP/lib/protobuf 5 | ./autogen.sh 6 | CPPFLAGS=-DGOOGLE_PROTOBUF_NO_RTTI \ 7 | CXXFLAGS=-fPIC \ 8 | ./configure \ 9 | --prefix=$GEM_FORGE_TOP/build \ 10 | --enable-shared=no \ 11 | --with-zlib=yes 12 | make -j $CORES 13 | make install 14 | # Build python files. 15 | cd python 16 | python3 setup.py build 17 | cd ../../.. 18 | 19 | echo "#" 20 | echo "######################## Build GemForge Transforms ##############################" 21 | echo "#" 22 | cd transform 23 | mkdir -p build 24 | cd build 25 | cmake .. 26 | make -j $CORES 27 | cd ../.. 28 | 29 | echo "#" 30 | echo "######################## Build DRAMSim3 for GEM5 ####################################" 31 | echo "#" 32 | cd gem5/ext/dramsim3/DRAMsim3 33 | mkdir -p build 34 | cd build 35 | cmake .. 36 | make -j $CORES 37 | cd ../../../../.. 38 | 39 | echo "#" 40 | echo "######################## Build GemForge GEM5 ####################################" 41 | echo "#" 42 | cd gem5 43 | scons build/X86/gem5.opt --default=X86 PROTOCOL=MESI_Three_Level_Stream 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gem-forge-stack 2 | 3 | This is the top level of Gem Forge framework. It is used in these work: 4 | 5 | ``` 6 | Z. Wang and T. Nowatzki 7 | "Stream-based Memory Access Specialization for General Purpose Processors" 8 | 2019 ACM/IEEE 46th Annual International Symposium on Computer Architecture (ISCA) 9 | 10 | Z. Wang, J. Weng, J. Lowe-Power, J. Gaur and T. Nowatzki 11 | "Stream Floating: Enabling Proactive and Decentralized Cache Optimizations" 12 | 2021 IEEE 27th International Symposium on High-Performance Computer Architecture (HPCA) 13 | 14 | Z. Wang, J. Weng, S. Liu and T. Nowatzki 15 | "Near-Stream Computing: General and Transparent Near-Cache Accelerations" 16 | 2022 IEEE 28th International Symposium on High-Performance Computer Architecture (HPCA) 17 | 18 | Z. Wang, C. Liu, A. Arora, L. John and T. Nowatzki 19 | "Infinity Stream: Portable and Programmer-Friendly In-/Near-Memory Fusion" 20 | 2023 28th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS) 21 | 22 | Z. Wang, C. Liu, N. Beckmann and T. Nowatzki 23 | "Affinity Alloc: Taming Not-So Near-Data Computing" 24 | 2023 56th IEEE/ACM International Symposium on Microarchitecture (MICRO) 25 | ``` 26 | 27 | Checkout [Get Started](https://github.com/PolyArch/gem-forge-framework/wiki/Get-Started!) for details about how to set up and use this framework. 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2020, PolyArch 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | .PHONY: all 3 | all: protobuf openlibm transform gem5 affinity_alloc 4 | echo "# Build everything!" 5 | 6 | .PHONY: protobuf 7 | protobuf: 8 | $(info #) 9 | $(info ######################## Build Protobuf #########################################) 10 | $(info #) 11 | cd ${GEM_FORGE_TOP}/lib/protobuf && \ 12 | ./autogen.sh && \ 13 | CPPFLAGS=-DGOOGLE_PROTOBUF_NO_RTTI \ 14 | CXXFLAGS=-fPIC \ 15 | ./configure \ 16 | --prefix=${GEM_FORGE_TOP}/build \ 17 | --enable-shared=no \ 18 | --with-zlib=yes && \ 19 | make -j ${CORES} install && \ 20 | cd python && \ 21 | python3 setup.py install --user 22 | 23 | .PHONY: openlibm 24 | openlibm: 25 | $(info #) 26 | $(info ######################## Build Openlibm #########################################) 27 | $(info #) 28 | cd ${GEM_FORGE_TOP}/lib/openlibm && \ 29 | make prefix=${GEM_FORGE_TOP}/build -j ${CORES} install 30 | 31 | TRANSFORM_COMPILE_COMMANDS=transform/build/compile_commands.json 32 | AFFINITY_ALLOC_COMPILE_COMMANDS=lib/affinity_alloc/build/compile_commands.json 33 | DRAMSIM3_COMPILE_COMMANDS=gem5/ext/dramsim3/DRAMsim3/build/compile_commands.json 34 | GEM5_COMPILE_COMMANDS=gem5/fixed_compile_commands.json 35 | ALL_COMPILE_COMMANDS=compile_commands.json 36 | 37 | .PHONY: dramsim3 38 | dramsim3: 39 | $(info #) 40 | $(info ######################## Build GemForge DRAMSIM3 ####################################) 41 | $(info #) 42 | cd gem5/ext/dramsim3/DRAMsim3 && \ 43 | mkdir -p build && \ 44 | cd build && \ 45 | cmake .. && \ 46 | make -j ${CORES} && \ 47 | cd ../../../../.. && \ 48 | python combine_compile_commands.py ${ALL_COMPILE_COMMANDS} ${DRAMSIM3_COMPILE_COMMANDS} 49 | 50 | .PHONY: clean-dramsim3 51 | clean-dramsim3: 52 | $(info #) 53 | $(info ######################## Clean GemForge DRAMSIM3 ####################################) 54 | $(info #) 55 | cd gem5/ext/dramsim3/DRAMsim3 && \ 56 | rm -rf build 57 | 58 | .PHONY: affinity_alloc 59 | affinity_alloc: 60 | $(info #) 61 | $(info ######################## Build Affinity Alloc ###################################) 62 | $(info #) 63 | cd lib/affinity_alloc && \ 64 | mkdir -p build && \ 65 | cd build && \ 66 | CC=clang CXX=clang++ cmake .. && \ 67 | make -j ${CORES} && \ 68 | cd ../../.. && \ 69 | python combine_compile_commands.py ${ALL_COMPILE_COMMANDS} ${AFFINITY_ALLOC_COMPILE_COMMANDS} 70 | 71 | .PHONY: transform 72 | transform: 73 | $(info #) 74 | $(info ######################## Build GemForge Transforms ##############################) 75 | $(info #) 76 | cd transform && \ 77 | mkdir -p build && \ 78 | cd build && \ 79 | cmake .. && \ 80 | make -j ${CORES} && \ 81 | cd ../.. && \ 82 | python combine_compile_commands.py ${ALL_COMPILE_COMMANDS} ${TRANSFORM_COMPILE_COMMANDS} 83 | 84 | # CORES=1 85 | .PHONY: gem5.opt 86 | gem5.opt: dramsim3 87 | $(info #) 88 | $(info ######################## Build GemForge GEM5 Opt ################################) 89 | $(info #) 90 | cd gem5 && \ 91 | bear scons build/X86/gem5.opt --default=X86 PROTOCOL=MESI_Three_Level_Stream -j ${CORES} && \ 92 | python fix_compile_command.py compile_commands.json ${CPATH} > fixed_compile_commands.json && \ 93 | cd .. && \ 94 | python combine_compile_commands.py ${ALL_COMPILE_COMMANDS} ${GEM5_COMPILE_COMMANDS} 95 | 96 | .PHONY: gem5.opt-fp 97 | gem5.opt-fp: dramsim3 98 | $(info #) 99 | $(info ######################## Build GemForge GEM5 Opt-Fp ############################) 100 | $(info #) 101 | cd gem5 && \ 102 | bear scons build/X86/gem5.opt-fp --default=X86 PROTOCOL=MESI_Three_Level_Stream -j ${CORES} && \ 103 | cd .. 104 | 105 | .PHONY: gem5.fast 106 | gem5.fast: dramsim3 107 | $(info #) 108 | $(info ######################## Build GemForge GEM5 Fast ###############################) 109 | $(info #) 110 | cd gem5 && \ 111 | bear scons build/X86/gem5.fast --default=X86 PROTOCOL=MESI_Three_Level_Stream -j ${CORES} && \ 112 | cd .. 113 | 114 | .PHONY: gem5 115 | gem5: gem5.fast gem5.opt 116 | $(info #) 117 | $(info ######################## Built GemForge GEM5 ####################################) 118 | $(info #) 119 | 120 | PUM_JITTER_FOLDER=build/X86/cpu/gem_forge/accelerator/stream/cache/pum 121 | PUM_JITTER_FAST=${PUM_JITTER_FOLDER}/pum-jitter.fast 122 | 123 | .PHONY: pum-jitter 124 | pum-jitter: 125 | $(info #) 126 | $(info ######################## Build PUM Jitter #######################################) 127 | $(info #) 128 | cd gem5 && \ 129 | bear scons ${PUM_JITTER_FAST} --verbose && \ 130 | python fix_compile_command.py compile_commands.json ${CPATH} > fixed_compile_commands.json && \ 131 | ${PUM_JITTER_FAST} && \ 132 | cd .. && \ 133 | python combine_compile_commands.py ${ALL_COMPILE_COMMANDS} ${GEM5_COMPILE_COMMANDS} 134 | -------------------------------------------------------------------------------- /example/Makefile: -------------------------------------------------------------------------------- 1 | 2 | SRC=${GEM_FORGE_TOP}/transform/benchmark/GemForgeMicroSuite/omp_dense_mv_blk/omp_dense_mv_blk.c 3 | FLAGS=-O3 -DGEM_FORGE -mavx512f -fopenmp -std=c11 -gline-tables-only 4 | 5 | LLVM_RELEASE=${GEM_FORGE_TOP}/llvm/install-release/bin 6 | CC=${LLVM_RELEASE}/clang 7 | CXX=${LLVM_RELEASE}/clang++ 8 | LLVM_DIS=${LLVM_RELEASE}/llvm-dis 9 | 10 | GEM_FORGE_TRANSFORM_SO=${GEM_FORGE_TOP}/transform/build/src/libLLVMTDGPass.so 11 | 12 | # We use debug version to enable the debug flags. 13 | LLVM_DEBUG=${GEM_FORGE_TOP}/llvm/install-debug/bin 14 | OPT=${LLVM_DEBUG}/opt 15 | 16 | GEM5_INC=${GEM_FORGE_TOP}/gem5/include 17 | GEM5_OPS=${GEM_FORGE_TOP}/gem5/util/m5/m5op_x86.S 18 | 19 | # Gem Forge requires the bitcode named. 20 | raw.bc: ${SRC} 21 | ${CC} $^ ${FLAGS} -c -emit-llvm -I${GEM5_INC} -o $@ 22 | ${OPT} -instnamer $@ -o $@ 23 | 24 | raw.ll: raw.bc 25 | ${LLVM_DIS} $^ -o $@ 26 | 27 | INST_UID=inst.uid 28 | TRACE_FUNC=.omp_outlined. 29 | TRACE_FILE=fake.trace 30 | 31 | traced.bc: raw.bc 32 | ${OPT} -load=${GEM_FORGE_TRANSFORM_SO} -trace-pass $^ -o $@ -trace-inst-uid-file ${INST_UID} -trace-function ${TRACE_FUNC} 33 | touch ${TRACE_FILE} 34 | 35 | VALID_OUT=valid 36 | VALID_EXTRA=valid/extra 37 | valid.bc: traced.bc raw.bc 38 | mkdir -p ${VALID_OUT} 39 | mkdir -p ${VALID_EXTRA} 40 | ${OPT} -load=${GEM_FORGE_TRANSFORM_SO} -valid-execution-pass \ 41 | raw.bc -o $@ \ 42 | -gem-forge-roi-function=${TRACE_FUNC} \ 43 | -gem-forge-inst-uid-file=${INST_UID} \ 44 | -output-datagraph=${VALID_OUT}/fake.0.tdg \ 45 | -output-extra-folder-path=${VALID_EXTRA} 46 | cp ${VALID_EXTRA}/ex.bc $@ 47 | 48 | STREAM_OUT=stream 49 | STREAM_EXTRA=stream/extra 50 | stream.bc: traced.bc raw.bc 51 | mkdir -p ${STREAM_OUT} 52 | mkdir -p ${STREAM_EXTRA} 53 | ${OPT} -load=${GEM_FORGE_TRANSFORM_SO} -stream-execution-static-pass \ 54 | -stream-pass-choose-strategy=static-outer \ 55 | -stream-pass-allow-aliased-stream \ 56 | -stream-pass-enable-store \ 57 | raw.bc -o $@ \ 58 | -gem-forge-roi-function=${TRACE_FUNC} \ 59 | -gem-forge-inst-uid-file=${INST_UID} \ 60 | -output-datagraph=${STREAM_OUT}/fake.0.tdg \ 61 | -output-extra-folder-path=${STREAM_EXTRA} 62 | cp ${STREAM_EXTRA}/ex.bc $@ 63 | 64 | %.o: %.bc 65 | ${CC} -c -O3 -ffp-contract=off $^ -o $@ 66 | 67 | %.exe: %.o 68 | ${CXX} -static -o $@ $^ -lomp -lpthread -Wl,--no-as-needed -ldl -I${GEM5_INC} ${GEM5_OPS} 69 | 70 | .PHONY: clean 71 | clean: 72 | rm -f *.bc *.ll *.o *.exe ${INST_UID} *.txt *.trace 73 | 74 | .PHONY: clean-all 75 | clean-all: clean 76 | rm -rf valid stream 77 | 78 | GEM5=${GEM_FORGE_TOP}/gem5/build/X86/gem5.opt 79 | GEM5_CONFIG=${GEM_FORGE_TOP}/gem5/configs/example/gem_forge/run.py 80 | 81 | THREADS=64 82 | 83 | O8_SIM=--llvm-store-queue-size=32 \ 84 | --llvm-mcpat=0 \ 85 | --caches \ 86 | --l2cache \ 87 | --gem-forge-num-active-cpus=1 \ 88 | --gem-forge-cache-load-ports=6 \ 89 | --gem-forge-cache-store-ports=4 \ 90 | --link-width-bits=256 \ 91 | --llc-select-low-bit=6 \ 92 | --cpu-type=DerivO3CPU \ 93 | --llvm-issue-width=8 \ 94 | --gem-forge-enable-func-acc-tick \ 95 | --prog-interval=10000 \ 96 | --tlb-timing-se \ 97 | --l1tlb-size=64 \ 98 | --l1tlb-assoc=8 \ 99 | --l2tlb-size=2048 \ 100 | --l2tlb-assoc=16 \ 101 | --l2tlb-hit-lat=8 \ 102 | --walker-se-lat=16 \ 103 | --walker-se-port=2 \ 104 | --num-cpus=64 \ 105 | --num-dirs=4 \ 106 | --num-l2caches=64 \ 107 | --mesh-rows=8 \ 108 | --ruby \ 109 | --access-backing-store \ 110 | --network=garnet2.0 \ 111 | --garnet-enable-multicast \ 112 | --router-latency=2 \ 113 | --link-latency=1 \ 114 | --mem-channels=2 \ 115 | --mem-size=16GB \ 116 | --topology=MeshDirCorners_XY \ 117 | --routing-YX \ 118 | --l1i_size=32kB \ 119 | --l1i_assoc=8 \ 120 | --l1d_size=32kB \ 121 | --l1d_lat=8 \ 122 | --l1d_mshrs=8 \ 123 | --l1d_assoc=8 \ 124 | --l1_5d_size=256kB \ 125 | --l1_5d_assoc=16 \ 126 | --l1_5d_mshrs=16 \ 127 | --l2_lat=16 \ 128 | --l2_size=1MB \ 129 | --l2_assoc=16 \ 130 | --l3_lat=20 \ 131 | --fast-forward=-1 \ 132 | --options=${THREADS} 133 | 134 | .PHONY: valid.o8.sim 135 | valid.o8.sim: valid.exe 136 | ${GEM5} \ 137 | --outdir=${VALID_OUT}/o8 \ 138 | --stats-file=text://stats.txt?dumpAll=False \ 139 | --listener-mode=off \ 140 | ${GEM5_CONFIG} \ 141 | --cmd=$^ \ 142 | ${O8_SIM} 143 | 144 | .PHONY: valid.o8-pf.sim 145 | valid.o8-pf.sim: valid.exe 146 | ${GEM5} \ 147 | --outdir=${VALID_OUT}/o8-pf \ 148 | --stats-file=text://stats.txt?dumpAll=False \ 149 | --listener-mode=off \ 150 | ${GEM5_CONFIG} \ 151 | --cmd=$^ \ 152 | ${O8_SIM} \ 153 | --gem-forge-prefetcher=bingo \ 154 | --gem-forge-l2-prefetcher=stride \ 155 | --gem-forge-l2-prefetch-dist=16 \ 156 | 157 | .PHONY: stream.o8.sim 158 | stream.o8.sim: stream.exe 159 | cp $^ ${STREAM_EXTRA}/ 160 | ${GEM5} \ 161 | --outdir=${STREAM_OUT}/o8 \ 162 | --stats-file=text://stats.txt?dumpAll=False \ 163 | --listener-mode=off \ 164 | ${GEM5_CONFIG} \ 165 | --cmd=${STREAM_EXTRA}/$^ \ 166 | ${O8_SIM} \ 167 | --gem-forge-stream-engine-enable \ 168 | --gem-forge-stream-engine-total-run-ahead-bytes=2048 \ 169 | --gem-forge-stream-engine-enable-lsq \ 170 | --gem-forge-stream-engine-enable-coalesce \ 171 | --gem-forge-stream-engine-throttling=global 172 | 173 | .PHONY: stream.o8-float.sim 174 | stream.o8-float.sim: stream.exe 175 | cp $^ ${STREAM_EXTRA}/ 176 | ${GEM5} \ 177 | --outdir=${STREAM_OUT}/o8-float \ 178 | --stats-file=text://stats.txt?dumpAll=False \ 179 | --listener-mode=off \ 180 | ${GEM5_CONFIG} \ 181 | --cmd=${STREAM_EXTRA}/$^ \ 182 | ${O8_SIM} \ 183 | --gem-forge-stream-engine-enable \ 184 | --gem-forge-stream-engine-total-run-ahead-bytes=2048 \ 185 | --gem-forge-stream-engine-enable-lsq \ 186 | --gem-forge-stream-engine-enable-coalesce \ 187 | --gem-forge-stream-engine-throttling=global \ 188 | --gem-forge-stream-engine-enable-float \ 189 | --gem-forge-stream-engine-mlc-stream-buffer-init-num-entries=32 \ 190 | --gem-forge-stream-engine-float-policy=smart \ 191 | --gem-forge-stream-engine-enable-float-indirect \ 192 | --gem-forge-stream-engine-enable-float-subline \ 193 | --gem-forge-stream-engine-enable-float-advance-migrate \ 194 | --gem-forge-stream-engine-llc-stream-max-infly-request=16 \ 195 | --llc-select-low-bit=10 \ 196 | 197 | .PHONY: sim-all 198 | sim-all: valid.o8.sim valid.o8-pf.sim stream.o8.sim stream.o8-float.sim 199 | echo "Simulation all done!" 200 | --------------------------------------------------------------------------------