summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/abstract_hardware_model.cc22
-rw-r--r--src/abstract_hardware_model.h2
-rw-r--r--src/cuda-sim/cuda-sim.cc6
-rw-r--r--src/stream_manager.cc3
4 files changed, 23 insertions, 10 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)
{
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h
index 11fee10..a0bf80d 100644
--- a/src/abstract_hardware_model.h
+++ b/src/abstract_hardware_model.h
@@ -275,12 +275,14 @@ public:
//Jin: parent and child kernel management for CDP
void set_parent(kernel_info_t * parent, dim3 parent_ctaid, dim3 parent_tid);
void set_child(kernel_info_t * child);
+ void remove_child(kernel_info_t * child);
bool is_finished();
bool children_all_finished();
void notify_parent_finished();
CUstream_st * create_stream_cta(dim3 ctaid);
CUstream_st * get_default_stream_cta(dim3 ctaid);
bool cta_has_stream(dim3 ctaid, CUstream_st* stream);
+ void print_parent_info();
private:
kernel_info_t * m_parent_kernel;
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index 58bd4e0..8dd1078 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -1781,11 +1781,7 @@ void gpgpu_cuda_ptx_sim_main_func( kernel_info_t &kernel, bool openCL )
//openCL kernel simulation calls don't register the kernel so we don't register its exit
if(!openCL) {
-
- //Jin: for CDP, children should be finished first
- if(kernel.is_finished()) {
- g_stream_manager->register_finished_kernel(kernel.get_uid());
- }
+ g_stream_manager->register_finished_kernel(kernel.get_uid());
}
//******PRINTING*******
diff --git a/src/stream_manager.cc b/src/stream_manager.cc
index 1f93c03..687d544 100644
--- a/src/stream_manager.cc
+++ b/src/stream_manager.cc
@@ -153,7 +153,8 @@ void stream_operation::do_operation( gpgpu_sim *gpu )
case stream_kernel_launch:
if( gpu->can_start_kernel() ) {
gpu->set_cache_config(m_kernel->name());
- printf("kernel \'%s\' transfer to GPU hardware scheduler\n", m_kernel->name().c_str() );
+ printf("kernel %d: \'%s\' transfer to GPU hardware scheduler\n", m_kernel->get_uid(), m_kernel->name().c_str() );
+ m_kernel->print_parent_info();
if( m_sim_mode )
gpu->functional_launch( m_kernel );
else