diff options
| -rw-r--r-- | src/gpgpusim_entrypoint.cc | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/gpgpusim_entrypoint.cc b/src/gpgpusim_entrypoint.cc index 7a39e5d..74a644a 100644 --- a/src/gpgpusim_entrypoint.cc +++ b/src/gpgpusim_entrypoint.cc @@ -107,17 +107,27 @@ void *gpgpu_sim_thread_concurrent(void*) bool active = false; bool sim_cycles = false; g_the_gpu->init(); + bool finished_kernel=false; do { // check if a kernel has completed unsigned grid_uid = g_the_gpu->finished_kernel(); if( grid_uid ){ g_stream_manager->register_finished_kernel(grid_uid); - break; //force stats print and update + finished_kernel=true; } - // launch operation on device if one is pending and can be run - stream_operation op = g_stream_manager->front(); - op.do_operation(g_the_gpu); + + if(finished_kernel){ + if(!g_the_gpu->active()) break; //delay the break until all instructions drain + } + else{ + /* Only insert new operations if no kernels have finished since the start of this + loop + */ + // launch operation on device if one is pending and can be run + stream_operation op = g_stream_manager->front(); + op.do_operation(g_the_gpu); + } // simulate a clock cycle on the GPU if( g_the_gpu->active() ) { |
