Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ add_subdirectory(ramulator)
add_subdirectory(pin/pin_lib)
add_subdirectory(pin/pin_exec/testing)

set(scarab_dirs bp debug bp/template_lib dvfs frontend globals isa libs memory power prefetcher confidence .)
set(scarab_dirs bp debug bp/template_lib dvfs frontend frontend/synthetic globals isa libs memory power prefetcher confidence .)
if(DEFINED ENV{SCARAB_ENABLE_PT_MEMTRACE})
set(scarab_dirs ${scarab_dirs} frontend/pt_memtrace)
endif()
Expand Down
2 changes: 2 additions & 0 deletions src/debug/debug.param.def
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,5 @@ DEF_PARAM( debug_fdip , DEBUG_FDIP
DEF_PARAM( debug_eip , DEBUG_EIP , Flag , Flag , FALSE , )
DEF_PARAM( debug_djolt , DEBUG_DJOLT , Flag , Flag , FALSE , )
DEF_PARAM( debug_fnlmma , DEBUG_FNLMMA , Flag , Flag , FALSE , )

DEF_PARAM( debug_synth , DEBUG_SYNTHETIC_INST , Flag , Flag , FALSE , )
11 changes: 10 additions & 1 deletion src/frontend/frontend.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "general.param.h"

#include "bp/bp.h"
#include "frontend/synthetic/synth_fe.h"

#include "frontend_intf.h"
#include "icache_stage.h"
Expand Down Expand Up @@ -72,6 +73,10 @@ void frontend_init() {
trace_init();
break;
}
case FE_SYNTHETIC: {
synth_init();
break;
}
#ifdef ENABLE_PT_MEMTRACE
case FE_PT:
case FE_MEMTRACE: {
Expand All @@ -95,6 +100,10 @@ void frontend_done(Flag* retired_exit) {
trace_done();
break;
}
case FE_SYNTHETIC: {
synth_done();
break;
}
#ifdef ENABLE_PT_MEMTRACE
case FE_PT:
case FE_MEMTRACE: {
Expand Down Expand Up @@ -178,4 +187,4 @@ void frontend_extract_basic_block_vectors() {
}
}
#endif
/*************************************************************/
/*************************************************************/
1 change: 1 addition & 0 deletions src/frontend/frontend_intf.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
/* Include headers of all the implementations here */
#include "frontend/pin_exec_driven_fe.h"
#include "frontend/pin_trace_fe.h"
#include "frontend/synthetic/synth_fe.h"

#ifdef ENABLE_PT_MEMTRACE
#include "frontend/pt_memtrace/trace_fe.h"
Expand Down
1 change: 1 addition & 0 deletions src/frontend/frontend_table.def
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
// Format: enum name, text name, function name prefix
FRONTEND_IMPL(PIN_EXEC_DRIVEN, "pin_exec_driven", pin_exec_driven)
FRONTEND_IMPL(TRACE, "trace", trace)
FRONTEND_IMPL(SYNTHETIC, "synthetic", synth)
#ifdef ENABLE_PT_MEMTRACE
FRONTEND_IMPL(MEMTRACE, "memtrace", ext_trace)
FRONTEND_IMPL(PT, "pt", ext_trace)
Expand Down
10 changes: 10 additions & 0 deletions src/frontend/synthetic/kernel_params.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* Kernel Enum */
typedef enum Kernel_Id_Enum {
#define KERNEL_IMPL(id, name) id,
#include "frontend/synthetic/kernel_table.def"
#undef KERNEL_IMPL
INVALID
} Kernel_Enum;

extern Kernel_Enum kernel;
extern const char* kernel_names[];
18 changes: 18 additions & 0 deletions src/frontend/synthetic/kernel_table.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Format: enum name, text name, function name prefix
KERNEL_IMPL(MEM_BANDWIDTH_LIMITED, "mem_bandwidth_limited")
KERNEL_IMPL(ICACHE_LIMITED, "icache_limited")
KERNEL_IMPL(DCACHE_LIMITED, "dcache_limited")
KERNEL_IMPL(MLC_LIMITED, "mlc_limited")
KERNEL_IMPL(LLC_LIMITED, "llc_limited")
KERNEL_IMPL(MEM_LIMITED, "mem_limited")
KERNEL_IMPL(ILP_LIMITED_1_DEP_CHAIN, "ilp_limited_1_dep_chain")
KERNEL_IMPL(ILP_LIMITED_2_DEP_CHAIN, "ilp_limited_2_dep_chain")
KERNEL_IMPL(ILP_LIMITED_4_DEP_CHAIN, "ilp_limited_4_dep_chain")
KERNEL_IMPL(CBR_LIMITED_20T, "cbr_limited_20t")
KERNEL_IMPL(CBR_LIMITED_50T, "cbr_limited_50t")
KERNEL_IMPL(CBR_LIMITED_80T, "cbr_limited_80t")
KERNEL_IMPL(BTB_LIMITED_FULL_CAPACITY_SWEEP, "btb_limited_full_capacity_sweep")
KERNEL_IMPL(BTB_LIMITED_FULL_ASSOC_SWEEP, "btb_limited_assoc_sweep")
KERNEL_IMPL(IBR_LIMITED_ROUNDROBIN_4TGTS, "ibr_limited_RR_4Tgts")
KERNEL_IMPL(IBR_LIMITED_RANDOM_4TGTS, "ibr_limited_random_4Tgts")
KERNEL_IMPL(IBR_LIMITED_Random_2TGTS, "ibr_limited_random_2Tgts")
181 changes: 181 additions & 0 deletions src/frontend/synthetic/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
#!/bin/bash

if [ -z "${SCARAB_ROOT}" ]; then
echo "set SCARAB_ROOT variable"
exit 1
fi

SCARAB_SRC="${SCARAB_ROOT}/src"
SCARAB="${SCARAB_SRC}/scarab"

if [ ! -f "${SCARAB}" ]; then
echo "build scarab first before running this"
exit 1
fi

INST_LIMIT="10000000"
FRONTEND="synthetic"
kernels=(
"icache_limited"
"mem_bandwidth_limited_1FU"
"mem_bandwidth_limited_2FU"
"mem_bandwidth_limited_4FU"
"dcache_limited"
"mlc_limited"
"llc_limited"
"ilp_limited_1_dep_chain"
"ilp_limited_2_dep_chain"
"ilp_limited_4_dep_chain"
"cbr_limited_20t"
"cbr_limited_50t"
"cbr_limited_80t"
"btb_limited_full_capacity_sweep"
"btb_limited_assoc_sweep"
"ibr_limited_RR_4Tgts"
"ibr_limited_random_4Tgts"
"ibr_limited_random_2Tgts"
"mem_limited"
)
OFF_FDIP="--fdip_enable 0"
UOP_CACHE_SCALE_UP="--uop_cache_lines 524288"
CBR_SCALE_BTB="--btb_entries 1048576 --btb_assoc 1024 --uop_cache_lines 1048576 --uop_cache_assoc 1024 --icache_size 524288 --icache_assoc 512"
UBR_SCALE_BTB="--btb_entries 128 --uop_cache_lines 1048576 --uop_cache_assoc 1024 --icache_size 524288 --icache_assoc 512"

FUTYPES_1FU="b00100100111111100111001001111110010010011111110011100100111111 \
b10010000110111100011111001110111001000011011110001111100111011 \
b00000001000000001000000010000010000000100000000100000000000001 \
b00000001000000001000000010000010000000100000000100000001000001 \
b00000000110111100011011001110110000000011011110001101100111011 \
b01001000000000000111001001111110100100000000000011100100111111 \
b00000010000000010000000100000010000001000000001000000010000001 \
b00000010000000010000000100000010000001000000001000000010000001"

FUTYPES_2FU="b00100100111111100111001001111110010010011111110011100100111111 \
b10010000110111100011111001110111001000011011110001111100111011 \
b00000001000000001000000010000010000000100000000100000001000001 \
b00000001000000001000000010000010000000100000000100000001000001 \
b00000000110111100011011001110110000000011011110001101100111011 \
b01001000000000000111001001111110100100000000000011100100111111 \
b00000010000000010000000100000010000001000000001000000010000001 \
b00000010000000010000000100000010000001000000001000000010000001"

FUTYPES_4FU="b00100100111111100111001001111110010010011111110011100100111111 \
b10010000110111100011111001110111001000011011110001111100111011 \
b00000001000000001000000010000010000000100000000100000001000001 \
b00000001000000001000000010000010000000100000000100000001000001 \
b00000000110111100011011001110110000000011011110001101101111011 \
b01001000000000000111001001111110100100000000000011100101111111 \
b00000010000000010000000100000010000001000000001000000010000001 \
b00000010000000010000000100000010000001000000001000000010000001"


for args in "${@}"; do
case ${args} in
--icache)
mkdir icache_limited
cd icache_limited
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel icache_limited --inst_limit "${INST_LIMIT}" ${OFF_FDIP}"
"${SCARAB}" --frontend "${FRONTEND}" --kernel icache_limited --inst_limit "${INST_LIMIT}" ${OFF_FDIP}
cd ..
;;

--mem_bandwidth_limited_1FU)
mkdir mem_band_1fu
cd mem_band_1fu
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_1FU}""
"${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_1FU}"
cd ..
;;

--mem_bandwidth_limited_2FU)
mkdir mem_band_2fu
cd mem_band_2fu
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_2FU}""
"${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_2FU}"
cd ..
;;

--mem_bandwidth_limited_4FU)
mkdir mem_band_4fu
cd mem_band_4fu
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_4FU}" --dcache_read_ports 6"
"${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_4FU}" --dcache_read_ports 6
cd ..
;;

--all)
for item in "${kernels[@]}" ; do
mkdir -p "./${item}"
cd "./${item}/"
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
# "${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}"
case "${item}" in
icache_limited)
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}" ${OFF_FDIP}"
"${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}" ${OFF_FDIP}
;;

cbr_limited_20t|cbr_limited_50t|cbr_limited_80t)
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}" ${CBR_SCALE_BTB}"
"${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}" ${CBR_SCALE_BTB}
;;

btb_limited_full_capacity_sweep|btb_limited_assoc_sweep)
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}" ${UBR_SCALE_BTB}"
"${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}" ${UBR_SCALE_BTB}
;;

mem_bandwidth_limited_1FU)
mkdir mem_band_1fu
cd mem_band_1fu
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_1FU}" --dcache_read_ports 6"
"${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_1FU}" --dcache_read_ports 6
cd ..
;;

mem_bandwidth_limited_2FU)
mkdir mem_band_2fu
cd mem_band_2fu
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_2FU}" --dcache_read_ports 6"
"${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_2FU}" --dcache_read_ports 6
cd ..
;;

mem_bandwidth_limited_4FU)
mkdir mem_band_4fu
cd mem_band_4fu
rm -r *
cp "${SCARAB_SRC}/PARAMS.sunny_cove" PARAMS.in
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_4FU}" --dcache_read_ports 6"
"${SCARAB}" --frontend "${FRONTEND}" --kernel mem_bandwidth_limited --inst_limit "${INST_LIMIT}" --fu_types "${FUTYPES_4FU}" --dcache_read_ports 6
cd ..
;;

*)
echo ""${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}""
"${SCARAB}" --frontend "${FRONTEND}" --kernel "${item}" --inst_limit "${INST_LIMIT}"
;;
esac
cd ..
done
;;

*)
echo "unknown option"
exit 1
;;
esac
done
Loading