summaryrefslogtreecommitdiff
path: root/libcuda
diff options
context:
space:
mode:
authorDeval Shah <[email protected]>2018-11-09 21:29:18 -0800
committerDeval Shah <[email protected]>2018-11-09 21:29:18 -0800
commit642818ae5ff61c1544bcce9e7ba2dd0aea47ea6a (patch)
tree74e003ab7fca4acf74272399ff5e90a470bd79ca /libcuda
parent7a9c450e6b905af9ca6cdd3c7b79ad5aec535a5a (diff)
Adding checkpoint support
Diffstat (limited to 'libcuda')
-rw-r--r--libcuda/cuda_runtime_api.cc35
1 files changed, 34 insertions, 1 deletions
diff --git a/libcuda/cuda_runtime_api.cc b/libcuda/cuda_runtime_api.cc
index f00fe52..4b50e34 100644
--- a/libcuda/cuda_runtime_api.cc
+++ b/libcuda/cuda_runtime_api.cc
@@ -1425,7 +1425,40 @@ __host__ cudaError_t CUDARTAPI cudaLaunch( const char *hostFun )
dim3 gridDim = config.grid_dim();
dim3 blockDim = config.block_dim();
-
+ gpgpu_t *gpu = context->get_device()->get_gpgpu();
+ checkpoint *g_checkpoint;
+ g_checkpoint = new checkpoint();
+ class memory_space *global_mem;
+ global_mem = gpu->get_global_memory();
+
+ if(gpu->resume_option ==1 && (grid->get_uid()==gpu->resume_kernel))
+ {
+
+ char f1name[2048];
+ snprintf(f1name,2048,"checkpoint_files/global_mem_%d.txt", grid->get_uid());
+
+ g_checkpoint->load_global_mem(global_mem, f1name);
+ for (int i=0;i<gpu->resume_CTA;i++)
+ grid->increment_cta_id();
+ }
+ if(gpu->resume_option==1 && (grid->get_uid()<gpu->resume_kernel))
+ {
+ char f1name[2048];
+ snprintf(f1name,2048,"checkpoint_files/global_mem_%d.txt", grid->get_uid());
+
+ g_checkpoint->load_global_mem(global_mem, f1name);
+ printf("Skipping kernel %d as resuming from kernel %d\n",grid->get_uid(),gpu->resume_kernel );
+ g_cuda_launch_stack.pop_back();
+ return g_last_cudaError = cudaSuccess;
+
+ }
+ if(gpu->checkpoint_option==1 && (grid->get_uid()>gpu->checkpoint_kernel))
+ {
+ printf("Skipping kernel %d as checkpoint from kernel %d\n",grid->get_uid(),gpu->checkpoint_kernel );
+ g_cuda_launch_stack.pop_back();
+ return g_last_cudaError = cudaSuccess;
+
+ }
printf("GPGPU-Sim PTX: pushing kernel \'%s\' to stream %u, gridDim= (%u,%u,%u) blockDim = (%u,%u,%u) \n",
kname.c_str(), stream?stream->get_uid():0, gridDim.x,gridDim.y,gridDim.z,blockDim.x,blockDim.y,blockDim.z );
stream_operation op(grid,g_ptx_sim_mode,stream);