summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcuda/cuda_runtime_api.cc116
-rw-r--r--libcuda/gpgpu_context.h5
-rw-r--r--libopencl/opencl_runtime_api.cc8
-rw-r--r--src/cuda-sim/cuda-sim.cc2
-rw-r--r--src/gpgpu-sim/gpu-sim.cc4
-rw-r--r--src/gpgpusim_entrypoint.cc161
-rw-r--r--src/gpgpusim_entrypoint.h6
7 files changed, 167 insertions, 135 deletions
diff --git a/libcuda/cuda_runtime_api.cc b/libcuda/cuda_runtime_api.cc
index 9459b64..5cefe60 100644
--- a/libcuda/cuda_runtime_api.cc
+++ b/libcuda/cuda_runtime_api.cc
@@ -150,9 +150,6 @@
#endif
-extern void synchronize();
-extern void exit_simulation();
-
/*DEVICE_BUILTIN*/
struct cudaArray
{
@@ -242,8 +239,8 @@ struct _cuda_device_id *gpgpu_context::GPGPUSim_Init()
prop->maxThreadsPerMultiProcessor = the_gpu->threads_per_core();
#endif
the_gpu->set_prop(prop);
- GPGPUsim_ctx_ptr()->the_cude_device = new _cuda_device_id(the_gpu);
- the_device = GPGPUsim_ctx_ptr()->the_cude_device;
+ the_gpgpusim->the_cude_device = new _cuda_device_id(the_gpu);
+ the_device = the_gpgpusim->the_cude_device;
}
start_sim_thread(1);
return the_device;
@@ -1876,6 +1873,28 @@ __host__ cudaError_t CUDARTAPI cudaStreamDestroyInternal(cudaStream_t stream, gp
return g_last_cudaError = cudaSuccess;
}
+__host__ cudaError_t CUDARTAPI cudaStreamSynchronizeInternal(cudaStream_t stream, gpgpu_context* gpgpu_ctx = NULL)
+{
+ gpgpu_context *ctx;
+ if (gpgpu_ctx){
+ ctx = gpgpu_ctx;
+ } else {
+ ctx = GPGPU_Context();
+ }
+ if(g_debug_execution >= 3){
+ announce_call(__my_func__);
+ }
+#if (CUDART_VERSION >= 3000)
+ if( stream == NULL )
+ ctx->synchronize();
+ return g_last_cudaError = cudaSuccess;
+ stream->synchronize();
+#else
+ printf("GPGPU-Sim PTX: WARNING: Asynchronous kernel execution not supported (%s)\n", __my_func__);
+#endif
+ return g_last_cudaError = cudaSuccess;
+}
+
void __cudaRegisterTextureInternal(
void **fatCubinHandle,
const struct textureReference *hostVar,
@@ -2065,6 +2084,53 @@ __host__ cudaError_t CUDARTAPI cudaStreamWaitEventInternal(cudaStream_t stream,
return g_last_cudaError = cudaSuccess;
}
+__host__ cudaError_t CUDARTAPI cudaThreadExitInternal(gpgpu_context* gpgpu_ctx = NULL)
+{
+ gpgpu_context *ctx;
+ if (gpgpu_ctx){
+ ctx = gpgpu_ctx;
+ } else {
+ ctx = GPGPU_Context();
+ }
+ if(g_debug_execution >= 3){
+ announce_call(__my_func__);
+ }
+ ctx->exit_simulation();
+ return g_last_cudaError = cudaSuccess;
+}
+
+__host__ cudaError_t CUDARTAPI cudaThreadSynchronizeInternal(gpgpu_context* gpgpu_ctx = NULL)
+{
+ gpgpu_context *ctx;
+ if (gpgpu_ctx){
+ ctx = gpgpu_ctx;
+ } else {
+ ctx = GPGPU_Context();
+ }
+ if(g_debug_execution >= 3){
+ announce_call(__my_func__);
+ }
+ //Called on host side
+ ctx->synchronize();
+ return g_last_cudaError = cudaSuccess;
+}
+
+cudaError_t CUDARTAPI cudaDeviceSynchronizeInternal(gpgpu_context* gpgpu_ctx = NULL)
+{
+ gpgpu_context *ctx;
+ if (gpgpu_ctx){
+ ctx = gpgpu_ctx;
+ } else {
+ ctx = GPGPU_Context();
+ }
+ if(g_debug_execution >= 3){
+ announce_call(__my_func__);
+ }
+ //Blocks until the device has completed all preceding requested tasks
+ ctx->synchronize();
+ return g_last_cudaError = cudaSuccess;
+}
+
/*******************************************************************************
* *
* *
@@ -2592,18 +2658,7 @@ __host__ cudaError_t CUDARTAPI cudaStreamDestroy(cudaStream_t stream)
__host__ cudaError_t CUDARTAPI cudaStreamSynchronize(cudaStream_t stream)
{
- if(g_debug_execution >= 3){
- announce_call(__my_func__);
- }
-#if (CUDART_VERSION >= 3000)
- if( stream == NULL )
- synchronize();
- return g_last_cudaError = cudaSuccess;
- stream->synchronize();
-#else
- printf("GPGPU-Sim PTX: WARNING: Asynchronous kernel execution not supported (%s)\n", __my_func__);
-#endif
- return g_last_cudaError = cudaSuccess;
+ return cudaStreamSynchronizeInternal(stream);
}
__host__ cudaError_t CUDARTAPI cudaStreamQuery(cudaStream_t stream)
@@ -2722,22 +2777,13 @@ __host__ cudaError_t CUDARTAPI cudaEventElapsedTime(float *ms, cudaEvent_t start
__host__ cudaError_t CUDARTAPI cudaThreadExit(void)
{
- if(g_debug_execution >= 3){
- announce_call(__my_func__);
- }
- exit_simulation();
- return g_last_cudaError = cudaSuccess;
+ return cudaThreadExitInternal();
}
__host__ cudaError_t CUDARTAPI cudaThreadSynchronize(void)
{
- if(g_debug_execution >= 3){
- announce_call(__my_func__);
- }
- //Called on host side
- synchronize();
- return g_last_cudaError = cudaSuccess;
-};
+ return cudaThreadSynchronizeInternal();
+}
int CUDARTAPI __cudaSynchronizeThreads(void**, void*)
{
@@ -3441,15 +3487,11 @@ cudaError_t cudaDeviceReset ( void ) {
}
return g_last_cudaError = cudaSuccess;
}
-cudaError_t CUDARTAPI cudaDeviceSynchronize(void){
- if(g_debug_execution >= 3){
- announce_call(__my_func__);
- }
- //Blocks until the device has completed all preceding requested tasks
- synchronize();
- return g_last_cudaError = cudaSuccess;
-}
+cudaError_t CUDARTAPI cudaDeviceSynchronize(void)
+{
+ return cudaDeviceSynchronizeInternal();
+}
void __cudaRegisterShared(
void **fatCubinHandle,
diff --git a/libcuda/gpgpu_context.h b/libcuda/gpgpu_context.h
index 45c5cdd..61d7507 100644
--- a/libcuda/gpgpu_context.h
+++ b/libcuda/gpgpu_context.h
@@ -52,6 +52,10 @@ class gpgpu_context {
cuda_device_runtime* device_runtime;
ptx_stats* stats;
// member function list
+ void synchronize();
+ void exit_simulation();
+ void print_simulation_time();
+ int gpgpu_opencl_ptx_sim_main_perf( kernel_info_t *grid );
void cuobjdumpParseBinary(unsigned int handle);
class symbol_table *gpgpu_ptx_sim_load_ptx_from_string( const char *p, unsigned source_num );
class symbol_table *gpgpu_ptx_sim_load_ptx_from_filename( const char *filename );
@@ -60,6 +64,7 @@ class gpgpu_context {
void print_ptx_file( const char *p, unsigned source_num, const char *filename );
class symbol_table* init_parser(const char*);
class gpgpu_sim *gpgpu_ptx_sim_init_perf();
+ void start_sim_thread(int api);
struct _cuda_device_id *GPGPUSim_Init();
void ptx_reg_options(option_parser_t opp);
const ptx_instruction* pc_to_instruction(unsigned pc);
diff --git a/libopencl/opencl_runtime_api.cc b/libopencl/opencl_runtime_api.cc
index 7f029c7..b032c05 100644
--- a/libopencl/opencl_runtime_api.cc
+++ b/libopencl/opencl_runtime_api.cc
@@ -647,13 +647,13 @@ unsigned _cl_kernel::sm_context_uid = 0;
class _cl_device_id *GPGPUSim_Init()
{
static _cl_device_id *the_device = NULL;
+ gpgpu_context *ctx;
+ ctx = GPGPU_Context();
if( !the_device ) {
- gpgpu_context *ctx;
- ctx = GPGPU_Context();
gpgpu_sim *the_gpu = ctx->gpgpu_ptx_sim_init_perf();
the_device = new _cl_device_id(the_gpu);
}
- start_sim_thread(2);
+ ctx->start_sim_thread(2);
return the_device;
}
@@ -960,7 +960,7 @@ clEnqueueNDRangeKernel(cl_command_queue command_queue,
if ( ctx->func_sim->g_ptx_sim_mode )
ctx->func_sim->gpgpu_opencl_ptx_sim_main_func( grid );
else
- gpgpu_opencl_ptx_sim_main_perf( grid );
+ ctx->gpgpu_opencl_ptx_sim_main_perf( grid );
return CL_SUCCESS;
}
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index fc1ea8e..7a130ea 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -2203,7 +2203,7 @@ void cuda_sim::gpgpu_cuda_ptx_sim_main_func( kernel_info_t &kernel, bool openCL
//g_simulation_starttime is initilized by gpgpu_ptx_sim_init_perf() in gpgpusim_entrypoint.cc upon starting gpgpu-sim
time_t end_time, elapsed_time, days, hrs, minutes, sec;
end_time = time((time_t *)NULL);
- elapsed_time = MAX(end_time - GPGPUsim_ctx_ptr()->g_simulation_starttime, 1);
+ elapsed_time = MAX(end_time - gpgpu_ctx->the_gpgpusim->g_simulation_starttime, 1);
//calculating and printing simulation time in terms of days, hours, minutes and seconds
diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc
index d236c74..56ea8c4 100644
--- a/src/gpgpu-sim/gpu-sim.cc
+++ b/src/gpgpu-sim/gpu-sim.cc
@@ -1144,7 +1144,7 @@ void gpgpu_sim::gpu_print_stat()
time_t curr_time;
time(&curr_time);
- unsigned long long elapsed_time = MAX( curr_time - GPGPUsim_ctx_ptr()->g_simulation_starttime, 1 );
+ unsigned long long elapsed_time = MAX( curr_time - gpgpu_ctx->the_gpgpusim->g_simulation_starttime, 1 );
printf( "gpu_total_sim_rate=%u\n", (unsigned)( ( gpu_tot_sim_insn + gpu_sim_insn ) / elapsed_time ) );
//shader_print_l1_miss_stat( stdout );
@@ -1717,7 +1717,7 @@ void gpgpu_sim::cycle()
time_t days, hrs, minutes, sec;
time_t curr_time;
time(&curr_time);
- unsigned long long elapsed_time = MAX(curr_time - GPGPUsim_ctx_ptr()->g_simulation_starttime, 1);
+ unsigned long long elapsed_time = MAX(curr_time - gpgpu_ctx->the_gpgpusim->g_simulation_starttime, 1);
if ( (elapsed_time - last_liveness_message_time) >= m_config.liveness_message_freq && DTRACE(LIVENESS) ) {
days = elapsed_time/(3600*24);
hrs = elapsed_time/3600 - 24*days;
diff --git a/src/gpgpusim_entrypoint.cc b/src/gpgpusim_entrypoint.cc
index 5ce40c6..846773d 100644
--- a/src/gpgpusim_entrypoint.cc
+++ b/src/gpgpusim_entrypoint.cc
@@ -43,38 +43,28 @@ static int sg_argc = 3;
static const char *sg_argv[] = {"", "-config","gpgpusim.config"};
-GPGPUsim_ctx* the_gpgpusim = NULL;
-
-GPGPUsim_ctx* GPGPUsim_ctx_ptr(){
- if(the_gpgpusim == NULL)
- the_gpgpusim = GPGPU_Context()->the_gpgpusim;
-
- return the_gpgpusim;
-}
-
-static void print_simulation_time();
-
-void *gpgpu_sim_thread_sequential(void*)
+void * gpgpu_sim_thread_sequential(void * ctx_ptr)
{
+ gpgpu_context * ctx = (gpgpu_context *)ctx_ptr;
// at most one kernel running at a time
bool done;
do {
- sem_wait(&(GPGPUsim_ctx_ptr()->g_sim_signal_start));
+ sem_wait(&(ctx->the_gpgpusim->g_sim_signal_start));
done = true;
- if( GPGPUsim_ctx_ptr()->g_the_gpu->get_more_cta_left() ) {
+ if( ctx->the_gpgpusim->g_the_gpu->get_more_cta_left() ) {
done = false;
- GPGPUsim_ctx_ptr()->g_the_gpu->init();
- while( GPGPUsim_ctx_ptr()->g_the_gpu->active() ) {
- GPGPUsim_ctx_ptr()->g_the_gpu->cycle();
- GPGPUsim_ctx_ptr()->g_the_gpu->deadlock_check();
+ ctx->the_gpgpusim->g_the_gpu->init();
+ while( ctx->the_gpgpusim->g_the_gpu->active() ) {
+ ctx->the_gpgpusim->g_the_gpu->cycle();
+ ctx->the_gpgpusim->g_the_gpu->deadlock_check();
}
- GPGPUsim_ctx_ptr()->g_the_gpu->print_stats();
- GPGPUsim_ctx_ptr()->g_the_gpu->update_stats();
- print_simulation_time();
+ ctx->the_gpgpusim->g_the_gpu->print_stats();
+ ctx->the_gpgpusim->g_the_gpu->update_stats();
+ ctx->print_simulation_time();
}
- sem_post(&(GPGPUsim_ctx_ptr()->g_sim_signal_finish));
+ sem_post(&(ctx->the_gpgpusim->g_sim_signal_finish));
} while(!done);
- sem_post(&(GPGPUsim_ctx_ptr()->g_sim_signal_exit));
+ sem_post(&(ctx->the_gpgpusim->g_sim_signal_exit));
return NULL;
}
@@ -86,8 +76,9 @@ static void termination_callback()
fflush(stdout);
}
-void *gpgpu_sim_thread_concurrent(void*)
+void *gpgpu_sim_thread_concurrent(void * ctx_ptr)
{
+ gpgpu_context * ctx = (gpgpu_context *)ctx_ptr;
atexit(termination_callback);
// concurrent kernel execution simulation thread
do {
@@ -95,19 +86,19 @@ void *gpgpu_sim_thread_concurrent(void*)
printf("GPGPU-Sim: *** simulation thread starting and spinning waiting for work ***\n");
fflush(stdout);
}
- while( GPGPUsim_ctx_ptr()->g_stream_manager->empty_protected() && !GPGPUsim_ctx_ptr()->g_sim_done )
+ while( ctx->the_gpgpusim->g_stream_manager->empty_protected() && !ctx->the_gpgpusim->g_sim_done )
;
if(g_debug_execution >= 3) {
printf("GPGPU-Sim: ** START simulation thread (detected work) **\n");
- GPGPUsim_ctx_ptr()->g_stream_manager->print(stdout);
+ ctx->the_gpgpusim->g_stream_manager->print(stdout);
fflush(stdout);
}
- pthread_mutex_lock(&(GPGPUsim_ctx_ptr()->g_sim_lock));
- GPGPUsim_ctx_ptr()->g_sim_active = true;
- pthread_mutex_unlock(&(GPGPUsim_ctx_ptr()->g_sim_lock));
+ pthread_mutex_lock(&(ctx->the_gpgpusim->g_sim_lock));
+ ctx->the_gpgpusim->g_sim_active = true;
+ pthread_mutex_unlock(&(ctx->the_gpgpusim->g_sim_lock));
bool active = false;
bool sim_cycles = false;
- GPGPUsim_ctx_ptr()->g_the_gpu->init();
+ ctx->the_gpgpusim->g_the_gpu->init();
do {
// check if a kernel has completed
// launch operation on device if one is pending and can be run
@@ -119,82 +110,82 @@ void *gpgpu_sim_thread_concurrent(void*)
// another kernel, the gpu is not re-initialized and the inter-kernel
// behaviour may be incorrect. Check that a kernel has finished and
// no other kernel is currently running.
- if(GPGPUsim_ctx_ptr()->g_stream_manager->operation(&sim_cycles) && !GPGPUsim_ctx_ptr()->g_the_gpu->active())
+ if(ctx->the_gpgpusim->g_stream_manager->operation(&sim_cycles) && !ctx->the_gpgpusim->g_the_gpu->active())
break;
//functional simulation
- if( GPGPUsim_ctx_ptr()->g_the_gpu->is_functional_sim()) {
- kernel_info_t * kernel = GPGPUsim_ctx_ptr()->g_the_gpu->get_functional_kernel();
+ if( ctx->the_gpgpusim->g_the_gpu->is_functional_sim()) {
+ kernel_info_t * kernel = ctx->the_gpgpusim->g_the_gpu->get_functional_kernel();
assert(kernel);
- GPGPUsim_ctx_ptr()->gpgpu_ctx->func_sim->gpgpu_cuda_ptx_sim_main_func(*kernel);
- GPGPUsim_ctx_ptr()->g_the_gpu->finish_functional_sim(kernel);
+ ctx->the_gpgpusim->gpgpu_ctx->func_sim->gpgpu_cuda_ptx_sim_main_func(*kernel);
+ ctx->the_gpgpusim->g_the_gpu->finish_functional_sim(kernel);
}
//performance simulation
- if( GPGPUsim_ctx_ptr()->g_the_gpu->active() ) {
- GPGPUsim_ctx_ptr()->g_the_gpu->cycle();
+ if( ctx->the_gpgpusim->g_the_gpu->active() ) {
+ ctx->the_gpgpusim->g_the_gpu->cycle();
sim_cycles = true;
- GPGPUsim_ctx_ptr()->g_the_gpu->deadlock_check();
+ ctx->the_gpgpusim->g_the_gpu->deadlock_check();
}else {
- if(GPGPUsim_ctx_ptr()->g_the_gpu->cycle_insn_cta_max_hit()){
- GPGPUsim_ctx_ptr()->g_stream_manager->stop_all_running_kernels();
- GPGPUsim_ctx_ptr()->g_sim_done = true;
- GPGPUsim_ctx_ptr()->break_limit = true;
+ if(ctx->the_gpgpusim->g_the_gpu->cycle_insn_cta_max_hit()){
+ ctx->the_gpgpusim->g_stream_manager->stop_all_running_kernels();
+ ctx->the_gpgpusim->g_sim_done = true;
+ ctx->the_gpgpusim->break_limit = true;
}
}
- active=GPGPUsim_ctx_ptr()->g_the_gpu->active() || !(GPGPUsim_ctx_ptr()->g_stream_manager->empty_protected());
+ active=ctx->the_gpgpusim->g_the_gpu->active() || !(ctx->the_gpgpusim->g_stream_manager->empty_protected());
- } while( active && !GPGPUsim_ctx_ptr()->g_sim_done);
+ } while( active && !ctx->the_gpgpusim->g_sim_done);
if(g_debug_execution >= 3) {
printf("GPGPU-Sim: ** STOP simulation thread (no work) **\n");
fflush(stdout);
}
if(sim_cycles) {
- GPGPUsim_ctx_ptr()->g_the_gpu->print_stats();
- GPGPUsim_ctx_ptr()->g_the_gpu->update_stats();
- print_simulation_time();
+ ctx->the_gpgpusim->g_the_gpu->print_stats();
+ ctx->the_gpgpusim->g_the_gpu->update_stats();
+ ctx->print_simulation_time();
}
- pthread_mutex_lock(&(GPGPUsim_ctx_ptr()->g_sim_lock));
- GPGPUsim_ctx_ptr()->g_sim_active = false;
- pthread_mutex_unlock(&(GPGPUsim_ctx_ptr()->g_sim_lock));
- } while( !GPGPUsim_ctx_ptr()->g_sim_done );
+ pthread_mutex_lock(&(ctx->the_gpgpusim->g_sim_lock));
+ ctx->the_gpgpusim->g_sim_active = false;
+ pthread_mutex_unlock(&(ctx->the_gpgpusim->g_sim_lock));
+ } while( !ctx->the_gpgpusim->g_sim_done );
printf("GPGPU-Sim: *** simulation thread exiting ***\n");
fflush(stdout);
- if(GPGPUsim_ctx_ptr()->break_limit) {
+ if(ctx->the_gpgpusim->break_limit) {
printf("GPGPU-Sim: ** break due to reaching the maximum cycles (or instructions) **\n");
exit(1);
}
- sem_post(&(GPGPUsim_ctx_ptr()->g_sim_signal_exit));
+ sem_post(&(ctx->the_gpgpusim->g_sim_signal_exit));
return NULL;
}
-void synchronize()
+void gpgpu_context::synchronize()
{
printf("GPGPU-Sim: synchronize waiting for inactive GPU simulation\n");
- GPGPUsim_ctx_ptr()->g_stream_manager->print(stdout);
+ the_gpgpusim->g_stream_manager->print(stdout);
fflush(stdout);
// sem_wait(&g_sim_signal_finish);
bool done = false;
do {
- pthread_mutex_lock(&(GPGPUsim_ctx_ptr()->g_sim_lock));
- done = ( GPGPUsim_ctx_ptr()->g_stream_manager->empty() && !GPGPUsim_ctx_ptr()->g_sim_active ) || GPGPUsim_ctx_ptr()->g_sim_done;
- pthread_mutex_unlock(&(GPGPUsim_ctx_ptr()->g_sim_lock));
+ pthread_mutex_lock(&(the_gpgpusim->g_sim_lock));
+ done = ( the_gpgpusim->g_stream_manager->empty() && !the_gpgpusim->g_sim_active ) || the_gpgpusim->g_sim_done;
+ pthread_mutex_unlock(&(the_gpgpusim->g_sim_lock));
} while (!done);
printf("GPGPU-Sim: detected inactive GPU simulation thread\n");
fflush(stdout);
// sem_post(&g_sim_signal_start);
}
-void exit_simulation()
+void gpgpu_context::exit_simulation()
{
- GPGPUsim_ctx_ptr()->g_sim_done=true;
+ the_gpgpusim->g_sim_done=true;
printf("GPGPU-Sim: exit_simulation called\n");
fflush(stdout);
- sem_wait(&(GPGPUsim_ctx_ptr()->g_sim_signal_exit));
+ sem_wait(&(the_gpgpusim->g_sim_signal_exit));
printf("GPGPU-Sim: simulation thread signaled exit\n");
fflush(stdout);
}
@@ -211,8 +202,8 @@ gpgpu_sim *gpgpu_context::gpgpu_ptx_sim_init_perf()
func_sim->ptx_opcocde_latency_options(opp);
icnt_reg_options(opp);
- GPGPUsim_ctx_ptr()->g_the_gpu_config = new gpgpu_sim_config(this);
- GPGPUsim_ctx_ptr()->g_the_gpu_config->reg_options(opp); // register GPU microrachitecture options
+ the_gpgpusim->g_the_gpu_config = new gpgpu_sim_config(this);
+ the_gpgpusim->g_the_gpu_config->reg_options(opp); // register GPU microrachitecture options
option_parser_cmdline(opp, sg_argc, sg_argv); // parse configuration options
fprintf(stdout, "GPGPU-Sim: Configuration options:\n\n");
@@ -220,37 +211,37 @@ gpgpu_sim *gpgpu_context::gpgpu_ptx_sim_init_perf()
// Set the Numeric locale to a standard locale where a decimal point is a "dot" not a "comma"
// so it does the parsing correctly independent of the system environment variables
assert(setlocale(LC_NUMERIC,"C"));
- GPGPUsim_ctx_ptr()->g_the_gpu_config->init();
+ the_gpgpusim->g_the_gpu_config->init();
- GPGPUsim_ctx_ptr()->g_the_gpu = new gpgpu_sim(*(GPGPUsim_ctx_ptr()->g_the_gpu_config), this);
- GPGPUsim_ctx_ptr()->g_stream_manager = new stream_manager((GPGPUsim_ctx_ptr()->g_the_gpu), func_sim->g_cuda_launch_blocking);
+ the_gpgpusim->g_the_gpu = new gpgpu_sim(*(the_gpgpusim->g_the_gpu_config), this);
+ the_gpgpusim->g_stream_manager = new stream_manager((the_gpgpusim->g_the_gpu), func_sim->g_cuda_launch_blocking);
- GPGPUsim_ctx_ptr()->g_simulation_starttime = time((time_t *)NULL);
+ the_gpgpusim->g_simulation_starttime = time((time_t *)NULL);
- sem_init(&(GPGPUsim_ctx_ptr()->g_sim_signal_start),0,0);
- sem_init(&(GPGPUsim_ctx_ptr()->g_sim_signal_finish),0,0);
- sem_init(&(GPGPUsim_ctx_ptr()->g_sim_signal_exit),0,0);
+ sem_init(&(the_gpgpusim->g_sim_signal_start),0,0);
+ sem_init(&(the_gpgpusim->g_sim_signal_finish),0,0);
+ sem_init(&(the_gpgpusim->g_sim_signal_exit),0,0);
- return GPGPUsim_ctx_ptr()->g_the_gpu;
+ return the_gpgpusim->g_the_gpu;
}
-void start_sim_thread(int api)
+void gpgpu_context::start_sim_thread(int api)
{
- if( GPGPUsim_ctx_ptr()->g_sim_done ) {
- GPGPUsim_ctx_ptr()->g_sim_done = false;
+ if( the_gpgpusim->g_sim_done ) {
+ the_gpgpusim->g_sim_done = false;
if( api == 1 ) {
- pthread_create(&(GPGPUsim_ctx_ptr()->g_simulation_thread),NULL,gpgpu_sim_thread_concurrent,NULL);
+ pthread_create(&(the_gpgpusim->g_simulation_thread),NULL,gpgpu_sim_thread_concurrent,(void *)this);
} else {
- pthread_create(&(GPGPUsim_ctx_ptr()->g_simulation_thread),NULL,gpgpu_sim_thread_sequential,NULL);
+ pthread_create(&(the_gpgpusim->g_simulation_thread),NULL,gpgpu_sim_thread_sequential,(void *)this);
}
}
}
-void print_simulation_time()
+void gpgpu_context::print_simulation_time()
{
time_t current_time, difference, d, h, m, s;
current_time = time((time_t *)NULL);
- difference = MAX(current_time - GPGPUsim_ctx_ptr()->g_simulation_starttime, 1);
+ difference = MAX(current_time - the_gpgpusim->g_simulation_starttime, 1);
d = difference/(3600*24);
h = difference/3600 - 24*d;
@@ -260,18 +251,18 @@ void print_simulation_time()
fflush(stderr);
printf("\n\ngpgpu_simulation_time = %u days, %u hrs, %u min, %u sec (%u sec)\n",
(unsigned)d, (unsigned)h, (unsigned)m, (unsigned)s, (unsigned)difference );
- printf("gpgpu_simulation_rate = %u (inst/sec)\n", (unsigned)(GPGPUsim_ctx_ptr()->g_the_gpu->gpu_tot_sim_insn / difference) );
- const unsigned cycles_per_sec = (unsigned)(GPGPUsim_ctx_ptr()->g_the_gpu->gpu_tot_sim_cycle / difference);
+ printf("gpgpu_simulation_rate = %u (inst/sec)\n", (unsigned)(the_gpgpusim->g_the_gpu->gpu_tot_sim_insn / difference) );
+ const unsigned cycles_per_sec = (unsigned)(the_gpgpusim->g_the_gpu->gpu_tot_sim_cycle / difference);
printf("gpgpu_simulation_rate = %u (cycle/sec)\n", cycles_per_sec );
- printf("gpgpu_silicon_slowdown = %ux\n", GPGPUsim_ctx_ptr()->g_the_gpu->shader_clock() * 1000 / cycles_per_sec);
+ printf("gpgpu_silicon_slowdown = %ux\n", the_gpgpusim->g_the_gpu->shader_clock() * 1000 / cycles_per_sec);
fflush(stdout);
}
-int gpgpu_opencl_ptx_sim_main_perf( kernel_info_t *grid )
+int gpgpu_context::gpgpu_opencl_ptx_sim_main_perf( kernel_info_t *grid )
{
- GPGPUsim_ctx_ptr()->g_the_gpu->launch(grid);
- sem_post(&(GPGPUsim_ctx_ptr()->g_sim_signal_start));
- sem_wait(&(GPGPUsim_ctx_ptr()->g_sim_signal_finish));
+ the_gpgpusim->g_the_gpu->launch(grid);
+ sem_post(&(the_gpgpusim->g_sim_signal_start));
+ sem_wait(&(the_gpgpusim->g_sim_signal_finish));
return 0;
}
diff --git a/src/gpgpusim_entrypoint.h b/src/gpgpusim_entrypoint.h
index b2e22e6..9f408df 100644
--- a/src/gpgpusim_entrypoint.h
+++ b/src/gpgpusim_entrypoint.h
@@ -76,10 +76,4 @@ class GPGPUsim_ctx {
};
-void start_sim_thread(int api);
-
-struct GPGPUsim_ctx* GPGPUsim_ctx_ptr();
-
-int gpgpu_opencl_ptx_sim_main_perf( kernel_info_t *grid );
-
#endif