aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/dummy/arch.c6
-rw-r--r--arch/dummy/arch_vars.py27
-rw-r--r--arch/dummy/vars.py18
-rw-r--r--arch/v1/arch.c32
-rw-r--r--arch/v1/arch_vars.py153
-rw-r--r--arch/v1/vars.py99
6 files changed, 136 insertions, 199 deletions
diff --git a/arch/dummy/arch.c b/arch/dummy/arch.c
index 5f7b912..20fc49d 100644
--- a/arch/dummy/arch.c
+++ b/arch/dummy/arch.c
@@ -1,4 +1,4 @@
-#if (defined(COMMAND_BENCH) || defined(COMMAND_NEW)) && defined(ANC_BYTES)
+#if defined(COMMAND_NEW)
void arch_core_init(struct Core *core) {
assert(core);
@@ -27,7 +27,7 @@ void arch_core_free(struct Core *core) {
(void)core;
}
-#if defined(COMMAND_LOAD) || defined(COMMAND_NEW)
+#if defined(COMMAND_NEW) || defined(COMMAND_LOAD)
void arch_core_save(FILE *f, const struct Core *core) {
assert(f);
assert(core);
@@ -144,7 +144,7 @@ const char *arch_mnemonic(uint8_t inst) {
return NULL;
}
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
#if defined(COMMAND_NEW)
void arch_push_data_header(void) {
assert(g_sim_data);
diff --git a/arch/dummy/arch_vars.py b/arch/dummy/arch_vars.py
deleted file mode 100644
index 0516167..0000000
--- a/arch/dummy/arch_vars.py
+++ /dev/null
@@ -1,27 +0,0 @@
-class ArchVars:
- def __init__(self, _):
- self.inst_set = [
- (["dummy", f"{i:02x}"], symbol)
- for i, symbol in enumerate(
- "⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙⡚⡛⡜⡝⡞⡟"
- "⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿"
- "⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟"
- "⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿"
- )
- ]
-
- self.core_fields = []
- self.core_data_fields = []
- self.mvec_loop = True
-
- self.proc_fields = [
- ("uint64_t", "ip"),
- ("uint64_t", "sp"),
- ("uint64_t", "mb0a"),
- ("uint64_t", "mb0s"),
- ("uint64_t", "mb1a"),
- ("uint64_t", "mb1s"),
- ]
-
- self.plots = {}
- self.heatmaps = {}
diff --git a/arch/dummy/vars.py b/arch/dummy/vars.py
new file mode 100644
index 0000000..7150767
--- /dev/null
+++ b/arch/dummy/vars.py
@@ -0,0 +1,18 @@
+inst_set = [(["dummy", f"{i:02x}"], symbol) for i, symbol in enumerate(
+ "⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙⡚⡛⡜⡝⡞⡟"
+ "⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿"
+ "⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟"
+ "⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿"
+)]
+
+core_data_fields = []
+core_fields = []
+mvec_loop = True
+proc_fields = [
+ ("uint64_t", "ip"),
+ ("uint64_t", "sp"),
+ ("uint64_t", "mb0a"),
+ ("uint64_t", "mb0s"),
+ ("uint64_t", "mb1a"),
+ ("uint64_t", "mb1s"),
+]
diff --git a/arch/v1/arch.c b/arch/v1/arch.c
index b4dabcf..ec5d778 100644
--- a/arch/v1/arch.c
+++ b/arch/v1/arch.c
@@ -7,7 +7,7 @@ enum {
#undef INST
};
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
#define ARCH_EVENT_ARRAYS \
ARCH_EVENT_ARRAY(0, wev) /* write events array*/ \
ARCH_EVENT_ARRAY(1, xev) /* memory block swap events array */
@@ -23,7 +23,7 @@ thrd_t g_arch_eva_thrds[CORES][ARCH_EVENT_ARRAYS_COUNT];
struct DeflateParams g_arch_eva_deflate_params[CORES][ARCH_EVENT_ARRAYS_COUNT];
#endif
-#if (defined(COMMAND_BENCH) || defined(COMMAND_NEW)) && defined(ANC_BYTES)
+#if defined(COMMAND_NEW)
void arch_core_init(struct Core *core) {
assert(core);
@@ -51,12 +51,12 @@ void arch_core_free(struct Core *core) {
(void)core;
}
-#if defined(COMMAND_LOAD) || defined(COMMAND_NEW)
+#if defined(COMMAND_NEW) || defined(COMMAND_LOAD)
void arch_core_save(FILE *f, const struct Core *core) {
assert(f);
assert(core);
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
fwrite(core->iexe, sizeof(uint64_t), INST_COUNT, f);
fwrite(core->iwrt, sizeof(uint64_t), INST_COUNT, f);
fwrite(&core->wmb0, sizeof(uint64_t), 1, f);
@@ -78,7 +78,7 @@ void arch_core_load(FILE *f, struct Core *core) {
assert(f);
assert(core);
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
fread(core->iexe, sizeof(uint64_t), INST_COUNT, f);
fread(core->iwrt, sizeof(uint64_t), INST_COUNT, f);
fread(&core->wmb0, sizeof(uint64_t), 1, f);
@@ -438,7 +438,7 @@ void _bswap(struct Core *core, uint64_t pix) {
proc->mb1a = tmpa;
proc->mb1s = tmps;
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
// Memory block swap events mark all addresses within both blocks
for (uint64_t i = 0; i < proc->mb0s; i++) {
uint64_t addr = proc->mb0a + i;
@@ -675,10 +675,10 @@ void _write(struct Core *core, uint64_t pix) {
if (_is_writeable_by(core, *regs[0], pix)) {
uint64_t addr = *regs[0];
-#if defined(DATA_PUSH_PATH)
- // Store write event
+#if defined(DATA_PUSH)
uint8_t inst = *regs[1] % INST_COUNT;
+ // Store write event
++core->iwrt[inst];
++core->weva[addr];
@@ -734,7 +734,7 @@ void arch_proc_step(struct Core *core, uint64_t pix) {
struct Proc *proc = proc_fetch(core, pix);
uint8_t inst = _get_inst(core, proc->ip);
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
// Store specific instruction execution event in database
++core->iexe[inst];
#endif
@@ -873,12 +873,12 @@ const char *arch_mnemonic(uint8_t inst) {
// ----------------------------------------------------------------------------
// Data aggregation functions
// ----------------------------------------------------------------------------
-#if defined(DATA_PUSH_PATH)
+#if defined(DATA_PUSH)
#if defined(COMMAND_NEW)
void arch_push_data_header(void) {
assert(g_sim_data);
- g_info("Creating 'arch' table in SQLite database");
+ g_info("Creating arch table in SQLite database");
salis_exec_sql(
0, NULL, NULL,
"create table arch ("
@@ -899,7 +899,7 @@ void arch_push_data_header(void) {
for (int i = 0; i < CORES; ++i) {
for (int j = 0; j < iprefs_cnt; ++j) {
- g_info("Creating '%s_%d' table in SQLite database", iprefs[j], i);
+ g_info("Creating %s_%d table in SQLite database", iprefs[j], i);
salis_exec_sql(
0, NULL, NULL,
"create table %s_%d ("
@@ -929,7 +929,7 @@ void arch_push_data_header(void) {
default: assert(false);
}
- g_info("Creating '%s_%d' table in SQLite database", pref, i);
+ g_info("Creating %s_%d table in SQLite database", pref, i);
salis_exec_sql(
0, NULL, NULL,
"create table %s_%d ("
@@ -969,7 +969,7 @@ void arch_push_data_line(void) {
#endif
}
- g_info("Pushing row to 'arch' table in SQLite database");
+ g_info("Pushing row to arch table in SQLite database");
salis_exec_sql(
0, NULL, NULL,
"insert into arch ("
@@ -1013,7 +1013,7 @@ void arch_push_data_line(void) {
default: assert(false);
}
- g_info("Pushing row to '%s_%d' table in SQLite database", pref, i);
+ g_info("Pushing row to %s_%d table in SQLite database", pref, i);
salis_exec_sql(
0, NULL, NULL,
"insert into %s_%d ("
@@ -1087,7 +1087,7 @@ void arch_push_data_line(void) {
const void *blob = params->out;
int blob_size = params->strm.total_out;
- g_info("Pushing row to '%s_%d' table in SQLite database", pref, i);
+ g_info("Pushing row to %s_%d table in SQLite database", pref, i);
salis_exec_sql(
1, &blob, &blob_size,
"insert into %s_%d ("
diff --git a/arch/v1/arch_vars.py b/arch/v1/arch_vars.py
deleted file mode 100644
index 9605f85..0000000
--- a/arch/v1/arch_vars.py
+++ /dev/null
@@ -1,153 +0,0 @@
-class ArchVars:
- def __init__(self, args):
- self.inst_set = [
- (["noop"], " "),
- (["nop0"], "0"),
- (["nop1"], "1"),
- (["nop2"], "2"),
- (["nop3"], "3"),
-
- (["jmpb"], "("),
- (["jmpf"], ")"),
- (["adrb"], "["),
- (["adrf"], "]"),
- (["ifnz"], "?"),
-
- (["allb"], "{"),
- (["allf"], "}"),
- (["bswp"], "%"),
- (["bclr"], "|"),
- (["splt"], "$"),
-
- (["addn"], "+"),
- (["subn"], "-"),
- (["muln"], "*"),
- (["divn"], "/"),
- (["incn"], "^"),
- (["decn"], "v"),
- (["notn"], "!"),
- (["shfl"], "<"),
- (["shfr"], ">"),
- (["zero"], "z"),
- (["unit"], "u"),
-
- (["pshn"], "#"),
- (["popn"], "~"),
-
- (["load"], "."),
- (["wrte"], ":"),
- (["dupl"], "="),
- (["swap"], "x"),
-
- (["keya"], "a"),
- (["keyb"], "b"),
- (["keyc"], "c"),
- (["keyd"], "d"),
- (["keye"], "e"),
- (["keyf"], "f"),
- (["keyg"], "g"),
- (["keyh"], "h"),
- (["keyi"], "i"),
- (["keyj"], "j"),
- (["keyk"], "k"),
- (["keyl"], "l"),
- (["keym"], "m"),
- (["keyn"], "n"),
- (["keyo"], "o"),
- (["keyp"], "p"),
-
- (["loka"], "A"),
- (["lokb"], "B"),
- (["lokc"], "C"),
- (["lokd"], "D"),
- (["loke"], "E"),
- (["lokf"], "F"),
- (["lokg"], "G"),
- (["lokh"], "H"),
- (["loki"], "I"),
- (["lokj"], "J"),
- (["lokk"], "K"),
- (["lokl"], "L"),
- (["lokm"], "M"),
- (["lokn"], "N"),
- (["loko"], "O"),
- (["lokp"], "P"),
- ]
-
- self.core_fields = []
- self.core_data_fields = [
- ("uint64_t", "ipop", f"[{len(self.inst_set)}]"), # instruction population counter
- ("uint64_t", "iexe", f"[{len(self.inst_set)}]"), # instruction execution counter
- ("uint64_t", "iwrt", f"[{len(self.inst_set)}]"), # instruction write counter
-
- ("uint64_t", "wmb0", ""), # writes within mb0 counter
- ("uint64_t", "wmb1", ""), # writes within mb1 counter
- ("uint64_t", "wdea", ""), # writes within dead code counter
-
- ("uint64_t", "weva", f"[{2 ** args.mvec_pow}]"), # write events array
- ("uint64_t", "xeva", f"[{2 ** args.mvec_pow}]"), # memory block swap events array
- ]
-
- self.mvec_loop = False
-
- self.proc_fields = [
- ("uint64_t", "ip"),
- ("uint64_t", "sp"),
- ("uint64_t", "mb0a"),
- ("uint64_t", "mb0s"),
- ("uint64_t", "mb1a"),
- ("uint64_t", "mb1s"),
- ("uint64_t", "r0x"),
- ("uint64_t", "r1x"),
- ("uint64_t", "r2x"),
- ("uint64_t", "r3x"),
- ("uint64_t", "s0"),
- ("uint64_t", "s1"),
- ("uint64_t", "s2"),
- ("uint64_t", "s3"),
- ("uint64_t", "s4"),
- ("uint64_t", "s5"),
- ("uint64_t", "s6"),
- ("uint64_t", "s7"),
- ]
-
- self.plots = {
- "General": {
- "wevs": {
- "table": "arch",
- "type": "lines",
- "cols": [f"{pref}_{i}" for pref in ["wmb0", "wmb1", "wdea"] for i in range(args.cores)],
- },
- },
- "Instructions": {
- f"ipop_{i}": {
- "table": f"pop_{i}",
- "type": "stack",
- "cols": ["_".join(inst[0]) for inst in self.inst_set],
- } for i in range(args.cores)
- } | {
- f"iexe%_{i}": {
- "table": f"exe_{i}",
- "type": "stack_percent",
- "cols": ["_".join(inst[0]) for inst in self.inst_set],
- } for i in range(args.cores)
- } | {
- f"iwrt%_{i}": {
- "table": f"wrt_{i}",
- "type": "stack_percent",
- "cols": ["_".join(inst[0]) for inst in self.inst_set],
- } for i in range(args.cores)
- },
- }
-
- self.heatmaps = {
- "Events": {
- f"wev_{i}": {
- "table": f"wev_{i}",
- } for i in range(args.cores)
- } | {
- f"xev_{i}": {
- "table": f"xev_{i}",
- } for i in range(args.cores)
- },
- }
diff --git a/arch/v1/vars.py b/arch/v1/vars.py
new file mode 100644
index 0000000..cf4f376
--- /dev/null
+++ b/arch/v1/vars.py
@@ -0,0 +1,99 @@
+inst_set = [
+ (["noop"], " "),
+ (["nop0"], "0"),
+ (["nop1"], "1"),
+ (["nop2"], "2"),
+ (["nop3"], "3"),
+ (["jmpb"], "("),
+ (["jmpf"], ")"),
+ (["adrb"], "["),
+ (["adrf"], "]"),
+ (["ifnz"], "?"),
+ (["allb"], "{"),
+ (["allf"], "}"),
+ (["bswp"], "%"),
+ (["bclr"], "|"),
+ (["splt"], "$"),
+ (["addn"], "+"),
+ (["subn"], "-"),
+ (["muln"], "*"),
+ (["divn"], "/"),
+ (["incn"], "^"),
+ (["decn"], "v"),
+ (["notn"], "!"),
+ (["shfl"], "<"),
+ (["shfr"], ">"),
+ (["zero"], "z"),
+ (["unit"], "u"),
+ (["pshn"], "#"),
+ (["popn"], "~"),
+ (["load"], "."),
+ (["wrte"], ":"),
+ (["dupl"], "="),
+ (["swap"], "x"),
+ (["keya"], "a"),
+ (["keyb"], "b"),
+ (["keyc"], "c"),
+ (["keyd"], "d"),
+ (["keye"], "e"),
+ (["keyf"], "f"),
+ (["keyg"], "g"),
+ (["keyh"], "h"),
+ (["keyi"], "i"),
+ (["keyj"], "j"),
+ (["keyk"], "k"),
+ (["keyl"], "l"),
+ (["keym"], "m"),
+ (["keyn"], "n"),
+ (["keyo"], "o"),
+ (["keyp"], "p"),
+ (["loka"], "A"),
+ (["lokb"], "B"),
+ (["lokc"], "C"),
+ (["lokd"], "D"),
+ (["loke"], "E"),
+ (["lokf"], "F"),
+ (["lokg"], "G"),
+ (["lokh"], "H"),
+ (["loki"], "I"),
+ (["lokj"], "J"),
+ (["lokk"], "K"),
+ (["lokl"], "L"),
+ (["lokm"], "M"),
+ (["lokn"], "N"),
+ (["loko"], "O"),
+ (["lokp"], "P"),
+]
+
+core_data_fields = [
+ ("uint64_t", f"ipop[{len(inst_set)}]"), # instruction population counter
+ ("uint64_t", f"iexe[{len(inst_set)}]"), # instruction execution counter
+ ("uint64_t", f"iwrt[{len(inst_set)}]"), # instruction write counter
+ ("uint64_t", "wmb0"), # writes within mb0 counter
+ ("uint64_t", "wmb1"), # writes within mb1 counter
+ ("uint64_t", "wdea"), # writes within dead code counter
+ ("uint64_t", f"weva[{2 ** globals()["args"].mvec_pow}]"), # write events array
+ ("uint64_t", f"xeva[{2 ** globals()["args"].mvec_pow}]"), # memory block swap events array
+]
+core_fields = []
+mvec_loop = False
+proc_fields = [
+ ("uint64_t", "ip"),
+ ("uint64_t", "sp"),
+ ("uint64_t", "mb0a"),
+ ("uint64_t", "mb0s"),
+ ("uint64_t", "mb1a"),
+ ("uint64_t", "mb1s"),
+ ("uint64_t", "r0x"),
+ ("uint64_t", "r1x"),
+ ("uint64_t", "r2x"),
+ ("uint64_t", "r3x"),
+ ("uint64_t", "s0"),
+ ("uint64_t", "s1"),
+ ("uint64_t", "s2"),
+ ("uint64_t", "s3"),
+ ("uint64_t", "s4"),
+ ("uint64_t", "s5"),
+ ("uint64_t", "s6"),
+ ("uint64_t", "s7"),
+]