summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcuda/cuda_runtime_api.cc4
-rw-r--r--src/gpgpusim_entrypoint.cc2
-rw-r--r--src/stream_manager.cc3
3 files changed, 8 insertions, 1 deletions
diff --git a/libcuda/cuda_runtime_api.cc b/libcuda/cuda_runtime_api.cc
index f130a37..33da17f 100644
--- a/libcuda/cuda_runtime_api.cc
+++ b/libcuda/cuda_runtime_api.cc
@@ -1203,6 +1203,10 @@ __host__ cudaError_t CUDARTAPI cudaStreamWaitEvent(cudaStream_t stream, cudaEven
{
CUevent_st *e = get_event(event);
if( !e ) return g_last_cudaError = cudaErrorUnknown;
+ if (!stream){
+ printf("GPGPU-Sim API: Warning: cudaStreamWaitEvent on NULL stream not currently supported.\n");
+ return g_last_cudaError = cudaErrorInvalidValue;
+ }
struct CUstream_st *s = (struct CUstream_st *)stream;
stream_operation op(s,e,flags);
g_stream_manager->push(op);
diff --git a/src/gpgpusim_entrypoint.cc b/src/gpgpusim_entrypoint.cc
index ede9f20..58d8c04 100644
--- a/src/gpgpusim_entrypoint.cc
+++ b/src/gpgpusim_entrypoint.cc
@@ -108,7 +108,7 @@ void *gpgpu_sim_thread_concurrent(void*)
printf("GPGPU-Sim: *** simulation thread starting and spinning waiting for work ***\n");
fflush(stdout);
}
- while( g_stream_manager->empty() && !g_sim_done )
+ while( g_stream_manager->empty_protected() && !g_sim_done )
;
if(g_debug_execution >= 3) {
printf("GPGPU-Sim: ** START simulation thread (detected work) **\n");
diff --git a/src/stream_manager.cc b/src/stream_manager.cc
index 547e06b..697d6ec 100644
--- a/src/stream_manager.cc
+++ b/src/stream_manager.cc
@@ -375,6 +375,8 @@ void stream_manager::destroy_stream( CUstream_st *stream )
bool stream_manager::concurrent_streams_empty()
{
bool result = true;
+ if (m_streams.empty())
+ return true;
// called by gpu simulation thread
std::list<struct CUstream_st *>::iterator s;
for( s=m_streams.begin(); s!=m_streams.end();++s ) {
@@ -382,6 +384,7 @@ bool stream_manager::concurrent_streams_empty()
if( !stream->empty() ) {
//stream->print(stdout);
result = false;
+ break;
}
}
return result;