summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.cc
diff options
context:
space:
mode:
authorJin Wang <[email protected]>2014-10-20 23:23:00 -0400
committerJin Wang <[email protected]>2016-07-05 09:05:36 -0400
commit6286547cfdc5d14c84568505db267f5e8dd9841f (patch)
treeccf100f77243ef4a63b14e938f122c95f5c18e04 /src/abstract_hardware_model.cc
parent5fc7bf5872aad126a09cad4b385054c4b3a094aa (diff)
BUG: multiple child kernels finish
Diffstat (limited to 'src/abstract_hardware_model.cc')
-rw-r--r--src/abstract_hardware_model.cc22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/abstract_hardware_model.cc b/src/abstract_hardware_model.cc
index b19b9d1..f3c5b21 100644
--- a/src/abstract_hardware_model.cc
+++ b/src/abstract_hardware_model.cc
@@ -595,6 +595,12 @@ void kernel_info_t::set_child(kernel_info_t * child) {
m_child_kernels.push_back(child);
}
+void kernel_info_t::remove_child(kernel_info_t * child) {
+ assert(std::find(m_child_kernels.begin(), m_child_kernels.end(), child)
+ != m_child_kernels.end());
+ m_child_kernels.remove(child);
+}
+
bool kernel_info_t::is_finished() {
if(done() && children_all_finished())
return true;
@@ -603,16 +609,15 @@ bool kernel_info_t::is_finished() {
}
bool kernel_info_t::children_all_finished() {
- for(auto child = m_child_kernels.begin(); child != m_child_kernels.end(); child++)
- {
- if(!(*child)->is_finished())
+ if(!m_child_kernels.empty())
return false;
- }
+
return true;
}
void kernel_info_t::notify_parent_finished() {
if(m_parent_kernel) {
+ m_parent_kernel->remove_child(this);
g_stream_manager->register_finished_kernel(m_parent_kernel->get_uid());
}
}
@@ -654,6 +659,15 @@ bool kernel_info_t::cta_has_stream(dim3 ctaid, CUstream_st* stream) {
return true;
}
+void kernel_info_t::print_parent_info() {
+ if(m_parent_kernel) {
+ printf("Parent %d: \'%s\', Block (%d, %d, %d), Thread (%d, %d, %d)\n",
+ m_parent_kernel->get_uid(), m_parent_kernel->name().c_str(),
+ m_parent_ctaid.x, m_parent_ctaid.y, m_parent_ctaid.z,
+ m_parent_tid.x, m_parent_tid.y, m_parent_tid.z);
+ }
+}
+
simt_stack::simt_stack( unsigned wid, unsigned warpSize)
{