summaryrefslogtreecommitdiff
path: root/src/gpgpusim_entrypoint.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpgpusim_entrypoint.cc')
-rw-r--r--src/gpgpusim_entrypoint.cc65
1 files changed, 48 insertions, 17 deletions
diff --git a/src/gpgpusim_entrypoint.cc b/src/gpgpusim_entrypoint.cc
index 5cd7d7f..fe5d112 100644
--- a/src/gpgpusim_entrypoint.cc
+++ b/src/gpgpusim_entrypoint.cc
@@ -72,23 +72,47 @@
#include "gpgpu-sim/gpu-sim.h"
#include "gpgpu-sim/icnt_wrapper.h"
+#include <pthread.h>
+#include <semaphore.h>
+
#define MAX(a,b) (((a)>(b))?(a):(b))
-struct gpgpu_ptx_sim_arg *grid_params;
-static int sg_grid_num=0;
static int sg_argc = 3;
static const char *sg_argv[] = {"", "-config","gpgpusim.config"};
+struct gpgpu_ptx_sim_arg *grid_params;
+
+sem_t g_sim_signal_start;
+sem_t g_sim_signal_finish;
time_t g_simulation_starttime;
+pthread_t g_simulation_thread;
-void gpgpu_ptx_sim_init_perf()
+gpgpu_sim g_the_gpu;
+
+static void print_simulation_time();
+
+void *gpgpu_sim_thread(void*)
+{
+ do {
+ sem_wait(&g_sim_signal_start);
+ unsigned grid;
+ class function_info *entry;
+ g_the_gpu.next_grid(grid,entry);
+ g_the_gpu.run_gpu_sim();
+ print_simulation_time();
+ sem_post(&g_sim_signal_finish);
+ } while(1);
+ return NULL;
+}
+
+gpgpu_sim *gpgpu_ptx_sim_init_perf()
{
print_splash();
read_sim_environment_variables();
read_parser_environment_variables();
option_parser_t opp = option_parser_create();
icnt_reg_options(opp);
- gpu_reg_options(opp); // register GPU microrachitecture options
+ g_the_gpu.reg_options(opp); // register GPU microrachitecture options
ptx_reg_options(opp);
option_parser_cmdline(opp, sg_argc, sg_argv); // parse configuration options
@@ -101,14 +125,19 @@ void gpgpu_ptx_sim_init_perf()
fprintf(stdout, "GPGPU-Sim: Configuration options:\n\n");
option_parser_print(opp, stdout);
- init_gpu();
- fprintf(stdout, "GPU performance model initialization complete.\n");
+
+ g_the_gpu.init_gpu();
g_simulation_starttime = time((time_t *)NULL);
-}
+ sem_init(&g_sim_signal_start,0,0);
+ sem_init(&g_sim_signal_finish,0,0);
+ pthread_create(&g_simulation_thread,NULL,gpgpu_sim_thread,NULL);
+
+ return &g_the_gpu;
+}
-static void print_simulation_time()
+void print_simulation_time()
{
time_t current_time, difference, d, h, m, s;
current_time = time((time_t *)NULL);
@@ -130,29 +159,31 @@ static void print_simulation_time()
int gpgpu_cuda_ptx_sim_main_perf( const char *kernel_key,
struct dim3 gridDim,
struct dim3 blockDim,
- struct gpgpu_ptx_sim_arg *grid_params )
+ gpgpu_ptx_sim_arg_list_t grid_params )
{
- gpgpu_cuda_ptx_sim_init_grid(kernel_key,grid_params,gridDim,blockDim);
- run_gpu_sim(sg_grid_num++);
- print_simulation_time();
+ kernel_info_t grid = gpgpu_cuda_ptx_sim_init_grid(kernel_key,grid_params,gridDim,blockDim);
+ g_the_gpu.launch(grid);
+ sem_post(&g_sim_signal_start);
+ sem_wait(&g_sim_signal_finish);
return 0;
}
int gpgpu_opencl_ptx_sim_main_perf( class function_info *entry,
struct dim3 gridDim,
struct dim3 blockDim,
- struct gpgpu_ptx_sim_arg *grid_params )
+ gpgpu_ptx_sim_arg_list_t grid_params )
{
- gpgpu_opencl_ptx_sim_init_grid(entry,grid_params,gridDim,blockDim);
- run_gpu_sim(sg_grid_num++);
- print_simulation_time();
+ kernel_info_t grid = gpgpu_opencl_ptx_sim_init_grid(entry,grid_params,gridDim,blockDim);
+ g_the_gpu.launch(grid);
+ sem_post(&g_sim_signal_start);
+ sem_wait(&g_sim_signal_finish);
return 0;
}
int gpgpu_opencl_ptx_sim_main_func( class function_info *entry,
struct dim3 gridDim,
struct dim3 blockDim,
- struct gpgpu_ptx_sim_arg *grid_params )
+ gpgpu_ptx_sim_arg_list_t grid_params )
{
printf("GPGPU-Sim PTX API: OpenCL functional-only simulation not yet implemented (use performance simulation)\n");
exit(1);