summaryrefslogtreecommitdiff
path: root/libcuda
diff options
context:
space:
mode:
authorTim Rogers <[email protected]>2018-11-05 21:50:40 -0500
committerGitHub <[email protected]>2018-11-05 21:50:40 -0500
commit0265d747b06c18d0a1ee00fb1641032201425c97 (patch)
tree9547bddfcc1c124deac5334dfae85a4a051002c4 /libcuda
parent42d8d8c9b5b0eb93ff228a877fd6a5bed5cf956d (diff)
parentb150969498792d50583674947d7c240cd6a11a68 (diff)
Merge pull request #80 from AamirRaihan/dev
Merging Tensor Cores code
Diffstat (limited to 'libcuda')
-rw-r--r--libcuda/cuda_runtime_api.cc36
1 files changed, 35 insertions, 1 deletions
diff --git a/libcuda/cuda_runtime_api.cc b/libcuda/cuda_runtime_api.cc
index a7c4ad3..61af0ee 100644
--- a/libcuda/cuda_runtime_api.cc
+++ b/libcuda/cuda_runtime_api.cc
@@ -966,7 +966,6 @@ __host__ cudaError_t CUDARTAPI cudaSetupArgument(const void *arg, size_t size, s
gpgpusim_ptx_assert( !g_cuda_launch_stack.empty(), "empty launch stack" );
kernel_config &config = g_cuda_launch_stack.back();
config.set_arg(arg,size,offset);
-
return g_last_cudaError = cudaSuccess;
}
@@ -994,6 +993,41 @@ __host__ cudaError_t CUDARTAPI cudaLaunch( const char *hostFun )
return g_last_cudaError = cudaSuccess;
}
+__host__ cudaError_t CUDARTAPI cudaLaunchKernel ( const char* hostFun, dim3 gridDim, dim3 blockDim, const void** args, size_t sharedMem, cudaStream_t stream )
+{
+ struct CUstream_st *s = (struct CUstream_st *)stream;
+ g_cuda_launch_stack.push_back( kernel_config(gridDim,blockDim,sharedMem,s) );
+
+ //printf("cudaLaunchKernel:sizeof(Arg[0])=%d)\n ",sizeof(args[0]));
+ kernel_config &config = g_cuda_launch_stack.back();
+ config.set_arg(args[0],432,0);//standard interface for cutlass library #TODO Implementing a generalized kernel
+
+ CUctx_st* context = GPGPUSim_Context();
+ char *mode = getenv("PTX_SIM_MODE_FUNC");
+ if( mode )
+ sscanf(mode,"%u", &g_ptx_sim_mode);
+ gpgpusim_ptx_assert( !g_cuda_launch_stack.empty(), "empty launch stack" );
+ kernel_config config1 = g_cuda_launch_stack.back();
+ struct CUstream_st *stream1 = config1.get_stream();
+ printf("\nGPGPU-Sim PTX: cudaLaunch for 0x%p (mode=%s) on stream %u\n", hostFun,
+ g_ptx_sim_mode?"functional simulation":"performance simulation", stream1?stream1->get_uid():0 );
+ kernel_info_t *grid = gpgpu_cuda_ptx_sim_init_grid(hostFun,config1.get_args(),config1.grid_dim(),config1.block_dim(),context);
+ std::string kname = grid->name();
+ dim3 gridDim1 = config1.grid_dim();
+ dim3 blockDim1 = config1.block_dim();
+ printf("GPGPU-Sim PTX: pushing kernel \'%s\' to stream %u, gridDim= (%u,%u,%u) blockDim = (%u,%u,%u) \n",
+ kname.c_str(), stream1?stream1->get_uid():0, gridDim1.x,gridDim1.y,gridDim1.z,blockDim1.x,blockDim1.y,blockDim1.z );
+
+ /*Kernel is hardcoded to enable the cutlass library*/
+ std::string cutlass("cutlass");
+ assert(kname.find(cutlass) != std::string::npos);
+
+ stream_operation op(grid,g_ptx_sim_mode,stream1);
+ g_stream_manager->push(op);
+ g_cuda_launch_stack.pop_back();
+ return g_last_cudaError = cudaSuccess;
+}
+
/*******************************************************************************
* *
* *