summaryrefslogtreecommitdiff
path: root/src/trace-driven/ISA_Def
diff options
context:
space:
mode:
authorMahmoud <[email protected]>2020-05-30 22:17:04 -0400
committerMahmoud <[email protected]>2020-05-30 22:17:04 -0400
commit3f051d4e5e24943575ac4c19c358e1a0e6de621c (patch)
tree45148f663962117f006b1da67e0ffeb743714a16 /src/trace-driven/ISA_Def
parent6b72554af7018a8dc42e607f6983a070fe5e5a42 (diff)
adding new specialization units
Diffstat (limited to 'src/trace-driven/ISA_Def')
-rw-r--r--src/trace-driven/ISA_Def/turing_opcode.h113
-rw-r--r--src/trace-driven/ISA_Def/volta_opcode.h50
2 files changed, 85 insertions, 78 deletions
diff --git a/src/trace-driven/ISA_Def/turing_opcode.h b/src/trace-driven/ISA_Def/turing_opcode.h
index 0374bdd..12bbe76 100644
--- a/src/trace-driven/ISA_Def/turing_opcode.h
+++ b/src/trace-driven/ISA_Def/turing_opcode.h
@@ -43,7 +43,8 @@ static const std::unordered_map<std::string, OpcodeChar> Turing_OpcodeMap = {
{"HSETP2", OpcodeChar(OP_HSETP2, SP_OP)},
// Tensor Core Instructions
- {"HMMA", OpcodeChar(OP_HMMA, TENSOR_CORE_OP)},
+ // Execute Tensor Core Instructions on SPECIALIZED_UNIT_3
+ {"HMMA", OpcodeChar(OP_HMMA, SPECIALIZED_UNIT_3_OP)},
// Double Point Instructions
{"DADD", OpcodeChar(OP_DADD, DP_OP)},
@@ -128,43 +129,46 @@ static const std::unordered_map<std::string, OpcodeChar> Turing_OpcodeMap = {
{"MEMBAR", OpcodeChar(OP_MEMBAR, MEMORY_BARRIER_OP)},
{"CCTLT", OpcodeChar(OP_CCTLT, ALU_OP)},
- // Uniform Datapath Instruction //
- {"R2UR", OpcodeChar(OP_R2UR, ALU_OP)},
- {"S2UR", OpcodeChar(OP_S2UR, ALU_OP)},
- {"UBMSK", OpcodeChar(OP_UBMSK, ALU_OP)},
- {"UBREV", OpcodeChar(OP_UBREV, ALU_OP)},
- {"UCLEA", OpcodeChar(OP_UCLEA, ALU_OP)},
- {"UFLO", OpcodeChar(OP_UFLO, ALU_OP)},
- {"UIADD3", OpcodeChar(OP_UIADD3, ALU_OP)},
- {"UIMAD", OpcodeChar(OP_UIMAD, ALU_OP)},
- {"UISETP", OpcodeChar(OP_UISETP, ALU_OP)},
- {"ULDC", OpcodeChar(OP_ULDC, ALU_OP)},
- {"ULEA", OpcodeChar(OP_ULEA, ALU_OP)},
- {"ULOP", OpcodeChar(OP_ULOP, ALU_OP)},
- {"ULOP3", OpcodeChar(OP_ULOP3, ALU_OP)},
- {"ULOP32I", OpcodeChar(OP_ULOP32I, ALU_OP)},
- {"UMOV", OpcodeChar(OP_UMOV, ALU_OP)},
- {"UP2UR", OpcodeChar(OP_UP2UR, ALU_OP)},
- {"UPLOP3", OpcodeChar(OP_UPLOP3, ALU_OP)},
- {"UPOPC", OpcodeChar(OP_UPOPC, ALU_OP)},
- {"UPRMT", OpcodeChar(OP_UPRMT, ALU_OP)},
- {"UPSETP", OpcodeChar(OP_UPSETP, ALU_OP)},
- {"UR2UP", OpcodeChar(OP_UR2UP, ALU_OP)},
- {"USEL", OpcodeChar(OP_USEL, ALU_OP)},
- {"USGXT", OpcodeChar(OP_USGXT, ALU_OP)},
- {"USHF", OpcodeChar(OP_USHF, ALU_OP)},
- {"USHL", OpcodeChar(OP_USHL, ALU_OP)},
- {"USHR", OpcodeChar(OP_USHR, ALU_OP)},
- {"VOTEU", OpcodeChar(OP_VOTEU, ALU_OP)},
+ // Uniform Datapath Instruction
+ // UDP unit
+ // for more info about UDP, see
+ // https://www.hotchips.org/hc31/HC31_2.12_NVIDIA_final.pdf
+ {"R2UR", OpcodeChar(OP_R2UR, SPECIALIZED_UNIT_4_OP)},
+ {"S2UR", OpcodeChar(OP_S2UR, SPECIALIZED_UNIT_4_OP)},
+ {"UBMSK", OpcodeChar(OP_UBMSK, SPECIALIZED_UNIT_4_OP)},
+ {"UBREV", OpcodeChar(OP_UBREV, SPECIALIZED_UNIT_4_OP)},
+ {"UCLEA", OpcodeChar(OP_UCLEA, SPECIALIZED_UNIT_4_OP)},
+ {"UFLO", OpcodeChar(OP_UFLO, SPECIALIZED_UNIT_4_OP)},
+ {"UIADD3", OpcodeChar(OP_UIADD3, SPECIALIZED_UNIT_4_OP)},
+ {"UIMAD", OpcodeChar(OP_UIMAD, SPECIALIZED_UNIT_4_OP)},
+ {"UISETP", OpcodeChar(OP_UISETP, SPECIALIZED_UNIT_4_OP)},
+ {"ULDC", OpcodeChar(OP_ULDC, SPECIALIZED_UNIT_4_OP)},
+ {"ULEA", OpcodeChar(OP_ULEA, SPECIALIZED_UNIT_4_OP)},
+ {"ULOP", OpcodeChar(OP_ULOP, SPECIALIZED_UNIT_4_OP)},
+ {"ULOP3", OpcodeChar(OP_ULOP3, SPECIALIZED_UNIT_4_OP)},
+ {"ULOP32I", OpcodeChar(OP_ULOP32I, SPECIALIZED_UNIT_4_OP)},
+ {"UMOV", OpcodeChar(OP_UMOV, SPECIALIZED_UNIT_4_OP)},
+ {"UP2UR", OpcodeChar(OP_UP2UR, SPECIALIZED_UNIT_4_OP)},
+ {"UPLOP3", OpcodeChar(OP_UPLOP3, SPECIALIZED_UNIT_4_OP)},
+ {"UPOPC", OpcodeChar(OP_UPOPC, SPECIALIZED_UNIT_4_OP)},
+ {"UPRMT", OpcodeChar(OP_UPRMT, SPECIALIZED_UNIT_4_OP)},
+ {"UPSETP", OpcodeChar(OP_UPSETP, SPECIALIZED_UNIT_4_OP)},
+ {"UR2UP", OpcodeChar(OP_UR2UP, SPECIALIZED_UNIT_4_OP)},
+ {"USEL", OpcodeChar(OP_USEL, SPECIALIZED_UNIT_4_OP)},
+ {"USGXT", OpcodeChar(OP_USGXT, SPECIALIZED_UNIT_4_OP)},
+ {"USHF", OpcodeChar(OP_USHF, SPECIALIZED_UNIT_4_OP)},
+ {"USHL", OpcodeChar(OP_USHL, SPECIALIZED_UNIT_4_OP)},
+ {"USHR", OpcodeChar(OP_USHR, SPECIALIZED_UNIT_4_OP)},
+ {"VOTEU", OpcodeChar(OP_VOTEU, SPECIALIZED_UNIT_4_OP)},
// Texture Instructions
// For now, we ignore texture loads, consider it as ALU_OP
- {"TEX", OpcodeChar(OP_TEX, ALU_OP)},
- {"TLD", OpcodeChar(OP_TLD, ALU_OP)},
- {"TLD4", OpcodeChar(OP_TLD4, ALU_OP)},
- {"TMML", OpcodeChar(OP_TMML, ALU_OP)},
- {"TXD", OpcodeChar(OP_TXD, ALU_OP)},
- {"TXQ", OpcodeChar(OP_TXQ, ALU_OP)},
+ {"TEX", OpcodeChar(OP_TEX, SPECIALIZED_UNIT_2_OP)},
+ {"TLD", OpcodeChar(OP_TLD, SPECIALIZED_UNIT_2_OP)},
+ {"TLD4", OpcodeChar(OP_TLD4, SPECIALIZED_UNIT_2_OP)},
+ {"TMML", OpcodeChar(OP_TMML, SPECIALIZED_UNIT_2_OP)},
+ {"TXD", OpcodeChar(OP_TXD, SPECIALIZED_UNIT_2_OP)},
+ {"TXQ", OpcodeChar(OP_TXQ, SPECIALIZED_UNIT_2_OP)},
// Surface Instructions //
{"SUATOM", OpcodeChar(OP_SUATOM, ALU_OP)},
@@ -173,26 +177,27 @@ static const std::unordered_map<std::string, OpcodeChar> Turing_OpcodeMap = {
{"SUST", OpcodeChar(OP_SUST, ALU_OP)},
// Control Instructions
- {"BMOV", OpcodeChar(OP_BMOV, BRANCH_OP)},
- {"BPT", OpcodeChar(OP_BPT, BRANCH_OP)},
- {"BRA", OpcodeChar(OP_BRA, BRANCH_OP)},
- {"BREAK", OpcodeChar(OP_BREAK, BRANCH_OP)},
- {"BRX", OpcodeChar(OP_BRX, BRANCH_OP)},
- {"BRXU", OpcodeChar(OP_BRXU, BRANCH_OP)}, //
- {"BSSY", OpcodeChar(OP_BSSY, BRANCH_OP)},
- {"BSYNC", OpcodeChar(OP_BSYNC, BRANCH_OP)},
- {"CALL", OpcodeChar(OP_CALL, CALL_OPS)},
+ // execute branch insts on a dedicated branch unit (SPECIALIZED_UNIT_1)
+ {"BMOV", OpcodeChar(OP_BMOV, SPECIALIZED_UNIT_1_OP)},
+ {"BPT", OpcodeChar(OP_BPT, SPECIALIZED_UNIT_1_OP)},
+ {"BRA", OpcodeChar(OP_BRA, SPECIALIZED_UNIT_1_OP)},
+ {"BREAK", OpcodeChar(OP_BREAK, SPECIALIZED_UNIT_1_OP)},
+ {"BRX", OpcodeChar(OP_BRX, SPECIALIZED_UNIT_1_OP)},
+ {"BRXU", OpcodeChar(OP_BRXU, SPECIALIZED_UNIT_1_OP)}, //
+ {"BSSY", OpcodeChar(OP_BSSY, SPECIALIZED_UNIT_1_OP)},
+ {"BSYNC", OpcodeChar(OP_BSYNC, SPECIALIZED_UNIT_1_OP)},
+ {"CALL", OpcodeChar(OP_CALL, SPECIALIZED_UNIT_1_OP)},
{"EXIT", OpcodeChar(OP_EXIT, EXIT_OPS)},
- {"JMP", OpcodeChar(OP_JMP, BRANCH_OP)},
- {"JMX", OpcodeChar(OP_JMX, BRANCH_OP)},
- {"JMXU", OpcodeChar(OP_JMXU, BRANCH_OP)}, ///
- {"KILL", OpcodeChar(OP_KILL, BRANCH_OP)},
- {"NANOSLEEP", OpcodeChar(OP_NANOSLEEP, BRANCH_OP)},
- {"RET", OpcodeChar(OP_RET, RET_OPS)},
- {"RPCMOV", OpcodeChar(OP_RPCMOV, BRANCH_OP)},
- {"RTT", OpcodeChar(OP_RTT, RET_OPS)},
- {"WARPSYNC", OpcodeChar(OP_WARPSYNC, BRANCH_OP)},
- {"YIELD", OpcodeChar(OP_YIELD, BRANCH_OP)},
+ {"JMP", OpcodeChar(OP_JMP, SPECIALIZED_UNIT_1_OP)},
+ {"JMX", OpcodeChar(OP_JMX, SPECIALIZED_UNIT_1_OP)},
+ {"JMXU", OpcodeChar(OP_JMXU, SPECIALIZED_UNIT_1_OP)}, ///
+ {"KILL", OpcodeChar(OP_KILL, SPECIALIZED_UNIT_3_OP)},
+ {"NANOSLEEP", OpcodeChar(OP_NANOSLEEP, SPECIALIZED_UNIT_1_OP)},
+ {"RET", OpcodeChar(OP_RET, SPECIALIZED_UNIT_1_OP)},
+ {"RPCMOV", OpcodeChar(OP_RPCMOV, SPECIALIZED_UNIT_1_OP)},
+ {"RTT", OpcodeChar(OP_RTT, SPECIALIZED_UNIT_1_OP)},
+ {"WARPSYNC", OpcodeChar(OP_WARPSYNC, SPECIALIZED_UNIT_1_OP)},
+ {"YIELD", OpcodeChar(OP_YIELD, SPECIALIZED_UNIT_1_OP)},
// Miscellaneous Instructions
{"B2R", OpcodeChar(OP_B2R, ALU_OP)},
diff --git a/src/trace-driven/ISA_Def/volta_opcode.h b/src/trace-driven/ISA_Def/volta_opcode.h
index 7bd6904..3358211 100644
--- a/src/trace-driven/ISA_Def/volta_opcode.h
+++ b/src/trace-driven/ISA_Def/volta_opcode.h
@@ -43,7 +43,8 @@ static const std::unordered_map<std::string, OpcodeChar> Volta_OpcodeMap = {
{"HSETP2", OpcodeChar(OP_HSETP2, SP_OP)},
// Tensor Core Instructions
- {"HMMA", OpcodeChar(OP_HMMA, TENSOR_CORE_OP)},
+ // Execute Tensor Core Instructions on SPECIALIZED_UNIT_3
+ {"HMMA", OpcodeChar(OP_HMMA, SPECIALIZED_UNIT_3_OP)},
// Double Point Instructions
{"DADD", OpcodeChar(OP_DADD, DP_OP)},
@@ -126,32 +127,33 @@ static const std::unordered_map<std::string, OpcodeChar> Volta_OpcodeMap = {
// Texture Instructions
// For now, we ignore texture loads, consider it as ALU_OP
- {"TEX", OpcodeChar(OP_TEX, ALU_OP)},
- {"TLD", OpcodeChar(OP_TLD, ALU_OP)},
- {"TLD4", OpcodeChar(OP_TLD4, ALU_OP)},
- {"TMML", OpcodeChar(OP_TMML, ALU_OP)},
- {"TXD", OpcodeChar(OP_TXD, ALU_OP)},
- {"TXQ", OpcodeChar(OP_TXQ, ALU_OP)},
+ {"TEX", OpcodeChar(OP_TEX, SPECIALIZED_UNIT_2_OP)},
+ {"TLD", OpcodeChar(OP_TLD, SPECIALIZED_UNIT_2_OP)},
+ {"TLD4", OpcodeChar(OP_TLD4, SPECIALIZED_UNIT_2_OP)},
+ {"TMML", OpcodeChar(OP_TMML, SPECIALIZED_UNIT_2_OP)},
+ {"TXD", OpcodeChar(OP_TXD, SPECIALIZED_UNIT_2_OP)},
+ {"TXQ", OpcodeChar(OP_TXQ, SPECIALIZED_UNIT_2_OP)},
// Control Instructions
- {"BMOV", OpcodeChar(OP_BMOV, BRANCH_OP)},
- {"BPT", OpcodeChar(OP_BPT, BRANCH_OP)},
- {"BRA", OpcodeChar(OP_BRA, BRANCH_OP)},
- {"BREAK", OpcodeChar(OP_BREAK, BRANCH_OP)},
- {"BRX", OpcodeChar(OP_BRX, BRANCH_OP)},
- {"BSSY", OpcodeChar(OP_BSSY, BRANCH_OP)},
- {"BSYNC", OpcodeChar(OP_BSYNC, BRANCH_OP)},
- {"CALL", OpcodeChar(OP_CALL, CALL_OPS)},
+ // execute branch insts on a dedicated branch unit (SPECIALIZED_UNIT_1)
+ {"BMOV", OpcodeChar(OP_BMOV, SPECIALIZED_UNIT_1_OP)},
+ {"BPT", OpcodeChar(OP_BPT, SPECIALIZED_UNIT_1_OP)},
+ {"BRA", OpcodeChar(OP_BRA, SPECIALIZED_UNIT_1_OP)},
+ {"BREAK", OpcodeChar(OP_BREAK, SPECIALIZED_UNIT_1_OP)},
+ {"BRX", OpcodeChar(OP_BRX, SPECIALIZED_UNIT_1_OP)},
+ {"BSSY", OpcodeChar(OP_BSSY, SPECIALIZED_UNIT_1_OP)},
+ {"BSYNC", OpcodeChar(OP_BSYNC, SPECIALIZED_UNIT_1_OP)},
+ {"CALL", OpcodeChar(OP_CALL, SPECIALIZED_UNIT_1_OP)},
{"EXIT", OpcodeChar(OP_EXIT, EXIT_OPS)},
- {"JMP", OpcodeChar(OP_JMP, BRANCH_OP)},
- {"JMX", OpcodeChar(OP_JMX, BRANCH_OP)},
- {"KILL", OpcodeChar(OP_KILL, BRANCH_OP)},
- {"NANOSLEEP", OpcodeChar(OP_NANOSLEEP, BRANCH_OP)},
- {"RET", OpcodeChar(OP_RET, RET_OPS)},
- {"RPCMOV", OpcodeChar(OP_RPCMOV, BRANCH_OP)},
- {"RTT", OpcodeChar(OP_RTT, RET_OPS)},
- {"WARPSYNC", OpcodeChar(OP_WARPSYNC, BRANCH_OP)},
- {"YIELD", OpcodeChar(OP_YIELD, BRANCH_OP)},
+ {"JMP", OpcodeChar(OP_JMP, SPECIALIZED_UNIT_1_OP)},
+ {"JMX", OpcodeChar(OP_JMX, SPECIALIZED_UNIT_1_OP)},
+ {"KILL", OpcodeChar(OP_KILL, SPECIALIZED_UNIT_1_OP)},
+ {"NANOSLEEP", OpcodeChar(OP_NANOSLEEP, SPECIALIZED_UNIT_1_OP)},
+ {"RET", OpcodeChar(OP_RET, SPECIALIZED_UNIT_1_OP)},
+ {"RPCMOV", OpcodeChar(OP_RPCMOV, SPECIALIZED_UNIT_1_OP)},
+ {"RTT", OpcodeChar(OP_RTT, SPECIALIZED_UNIT_1_OP)},
+ {"WARPSYNC", OpcodeChar(OP_WARPSYNC, SPECIALIZED_UNIT_1_OP)},
+ {"YIELD", OpcodeChar(OP_YIELD, SPECIALIZED_UNIT_1_OP)},
// Miscellaneous Instructions
{"B2R", OpcodeChar(OP_B2R, ALU_OP)},