summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.cc
diff options
context:
space:
mode:
authoraamir <[email protected]>2018-10-24 21:18:27 -0700
committeraamir <[email protected]>2018-10-24 21:18:27 -0700
commit7c441c450e40bf07bdf1acfe1eb2258952e1f7b7 (patch)
treeff4f3ab1e5d42c8284d419209afb2ccc5f25603b /src/abstract_hardware_model.cc
parent68134d5eb326552fc1ef4b02b2eb21103266283b (diff)
parent09e6092ace5213a5d5a49bf80b052802c06a4268 (diff)
merged tensor-cores code
Diffstat (limited to 'src/abstract_hardware_model.cc')
-rw-r--r--src/abstract_hardware_model.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/abstract_hardware_model.cc b/src/abstract_hardware_model.cc
index fe6f8ab..f7f1016 100644
--- a/src/abstract_hardware_model.cc
+++ b/src/abstract_hardware_model.cc
@@ -184,7 +184,7 @@ void warp_inst_t::generate_mem_accesses()
{
if( empty() || op == MEMORY_BARRIER_OP || m_mem_accesses_created )
return;
- if ( !((op == LOAD_OP) || (op == STORE_OP)) )
+ if (!((op == LOAD_OP) || (op==TENSOR_CORE_LOAD_OP) || (op == STORE_OP)||(op==TENSOR_CORE_STORE_OP)))
return;
if( m_warp_active_mask.count() == 0 )
return; // predicated off
@@ -213,6 +213,7 @@ void warp_inst_t::generate_mem_accesses()
access_type = is_write? LOCAL_ACC_W: LOCAL_ACC_R;
break;
case shared_space: break;
+ case sstarr_space: break;
default: assert(0); break;
}
@@ -220,7 +221,8 @@ void warp_inst_t::generate_mem_accesses()
new_addr_type cache_block_size = 0; // in bytes
switch( space.get_type() ) {
- case shared_space: {
+ case shared_space:
+ case sstarr_space: {
unsigned subwarp_size = m_config->warp_size / m_config->mem_warp_parts;
unsigned total_accesses=0;
for( unsigned subwarp=0; subwarp < m_config->mem_warp_parts; subwarp++ ) {
@@ -387,7 +389,8 @@ void warp_inst_t::memory_coalescing_arch_13( bool is_write, mem_access_type acce
assert(num_accesses <= MAX_ACCESSES_PER_INSN_PER_THREAD);
- for(unsigned access=0; access<num_accesses; access++) {
+// for(unsigned access=0; access<num_accesses; access++) {
+ for(unsigned access=0; (access<MAX_ACCESSES_PER_INSN_PER_THREAD)&&(m_per_scalar_thread[thread].memreqaddr[access]!=0); access++) {
new_addr_type addr = m_per_scalar_thread[thread].memreqaddr[access];
unsigned block_address = line_size_based_tag_func(addr,segment_size);
unsigned chunk = (addr&127)/32; // which 32-byte chunk within in a 128-byte chunk does this thread access?