summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.cc
diff options
context:
space:
mode:
authorTim Rogers <[email protected]>2011-10-27 17:12:10 -0800
committerAndrew Boktor <[email protected]>2014-08-14 13:18:24 -0700
commit0921d949dbb6233b8482b1fee90cfcc4ab2d0764 (patch)
tree51433f52f8d2a4d70ad0821995027b8e05d31d03 /src/abstract_hardware_model.cc
parente11f8a1d3deb7dcb1b5dbef06dcc994436ff98c1 (diff)
Actually fixing the atomic bug
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 10756]
Diffstat (limited to 'src/abstract_hardware_model.cc')
-rw-r--r--src/abstract_hardware_model.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/abstract_hardware_model.cc b/src/abstract_hardware_model.cc
index 802547e..90f45d9 100644
--- a/src/abstract_hardware_model.cc
+++ b/src/abstract_hardware_model.cc
@@ -125,6 +125,23 @@ void warp_inst_t::set_active( const active_mask_t &active ) {
}
}
+void warp_inst_t::do_atomic() {
+ do_atomic( m_warp_active_mask );
+}
+
+void warp_inst_t::do_atomic( const active_mask_t& access_mask ) {
+ assert( m_isatomic && !m_empty );
+ for( unsigned i=0; i < m_config->warp_size; i++ )
+ {
+ if( access_mask.test(i) )
+ {
+ dram_callback_t &cb = m_per_scalar_thread[i].callback;
+ if( cb.thread )
+ cb.function(cb.instruction, cb.thread);
+ }
+ }
+}
+
void warp_inst_t::generate_mem_accesses()
{
if( empty() || op == MEMORY_BARRIER_OP || m_mem_accesses_created )