summaryrefslogtreecommitdiff
path: root/libcuda
diff options
context:
space:
mode:
authorMengchi Zhang <[email protected]>2019-07-16 10:36:42 -0400
committerGitHub <[email protected]>2019-07-16 10:36:42 -0400
commitbf198b13541a427cba9bef22799955aa08ab050a (patch)
tree4af15f4e22cb0c55450e26cb97110534148c8c60 /libcuda
parent89e913f7b28e342b9023a01105cb441cfafbee8b (diff)
parente1fa1a3cc7c509417064a8e4cdab71e3f7feb881 (diff)
Merge pull request #25 from echoedit/dev
Dev
Diffstat (limited to 'libcuda')
-rw-r--r--libcuda/cuda_api_object.h1
-rw-r--r--libcuda/cuda_runtime_api.cc11
-rw-r--r--libcuda/gpgpu_context.h30
3 files changed, 31 insertions, 11 deletions
diff --git a/libcuda/cuda_api_object.h b/libcuda/cuda_api_object.h
index db5e6a4..51416f2 100644
--- a/libcuda/cuda_api_object.h
+++ b/libcuda/cuda_api_object.h
@@ -199,6 +199,7 @@ class cuda_runtime_api {
std::list<cuobjdumpSection*> mergeSections();
cuobjdumpELFSection* findELFSection(const std::string identifier);
cuobjdumpPTXSection* findPTXSection(const std::string identifier);
+ cuobjdumpPTXSection* findPTXSectionInList(std::list<cuobjdumpSection*> &sectionlist, const std::string identifier);
void cuobjdumpRegisterFatBinary(unsigned int handle, const char* filename, CUctx_st *context);
kernel_info_t *gpgpu_cuda_ptx_sim_init_grid( const char *kernel_key,
gpgpu_ptx_sim_arg_list_t args,
diff --git a/libcuda/cuda_runtime_api.cc b/libcuda/cuda_runtime_api.cc
index 59d2a60..10a651a 100644
--- a/libcuda/cuda_runtime_api.cc
+++ b/libcuda/cuda_runtime_api.cc
@@ -2421,7 +2421,6 @@ __host__ cudaError_t CUDARTAPI cudaGetExportTable(const void **ppExportTable, co
//extracts all ptx files from binary and dumps into prog_name.unique_no.sm_<>.ptx files
void cuda_runtime_api::extract_ptx_files_using_cuobjdump(CUctx_st *context){
- extern bool g_cdp_enabled;
char command[1000];
char *pytorch_bin = getenv("PYTORCH_BIN");
std::string app_binary = get_app_binary();
@@ -2442,7 +2441,7 @@ void cuda_runtime_api::extract_ptx_files_using_cuobjdump(CUctx_st *context){
printf("WARNING: Failed to execute cuobjdump to get list of ptx files \n");
exit(0);
}
- if(!g_cdp_enabled) {
+ if(!gpgpu_ctx->device_runtime->g_cdp_enabled) {
//based on the list above, dump ptx files individually. Format of dumped ptx file is prog_name.unique_no.sm_<>.ptx
std::ifstream infile(ptx_list_file_name);
@@ -2515,7 +2514,6 @@ void cuda_runtime_api::extract_code_using_cuobjdump(){
}
// Running cuobjdump using dynamic link to current process
// Needs the option '-all' to extract PTX from CDP-enabled binary
- extern bool g_cdp_enabled;
//dump ptx for all individial ptx files into sepearte files which is later used by ptxas.
int result=0;
@@ -2530,7 +2528,7 @@ void cuda_runtime_api::extract_code_using_cuobjdump(){
snprintf(fname,1024,"_cuobjdump_complete_output_XXXXXX");
int fd=mkstemp(fname);
close(fd);
- if(!g_cdp_enabled)
+ if(!gpgpu_ctx->device_runtime->g_cdp_enabled)
snprintf(command,1000,"$CUDA_INSTALL_PATH/bin/cuobjdump -ptx -elf -sass %s > %s", app_binary.c_str(), fname);
else
snprintf(command,1000,"$CUDA_INSTALL_PATH/bin/cuobjdump -ptx -elf -sass -all %s > %s", app_binary.c_str(), fname);
@@ -2822,7 +2820,7 @@ cuobjdumpELFSection* cuda_runtime_api::findELFSection(const std::string identifi
}
//! Within the section list, find the PTX section corresponding to a given identifier
-cuobjdumpPTXSection* findPTXSectionInList(std::list<cuobjdumpSection*> &sectionlist, const std::string identifier){
+cuobjdumpPTXSection* cuda_runtime_api::findPTXSectionInList(std::list<cuobjdumpSection*> &sectionlist, const std::string identifier){
std::list<cuobjdumpSection*>::iterator iter;
for ( iter = sectionlist.begin();
iter != sectionlist.end();
@@ -2833,8 +2831,7 @@ cuobjdumpPTXSection* findPTXSectionInList(std::list<cuobjdumpSection*> &sectionl
if(ptxsection->getIdentifier() == identifier)
return ptxsection;
else {
- extern bool g_cdp_enabled;
- if(g_cdp_enabled) {
+ if(gpgpu_ctx->device_runtime->g_cdp_enabled) {
printf("Warning: __cudaRegisterFatBinary needs %s, but find PTX section with %s\n",
identifier.c_str(), ptxsection->getIdentifier().c_str());
return ptxsection;
diff --git a/libcuda/gpgpu_context.h b/libcuda/gpgpu_context.h
index 3c9f87c..45c5cdd 100644
--- a/libcuda/gpgpu_context.h
+++ b/libcuda/gpgpu_context.h
@@ -6,32 +6,51 @@
#include "../src/gpgpusim_entrypoint.h"
#include "../src/cuda-sim/cuda-sim.h"
#include "../src/cuda-sim/cuda_device_runtime.h"
+#include "../src/cuda-sim/ptx-stats.h"
class gpgpu_context {
public:
gpgpu_context() {
g_global_allfiles_symbol_table = NULL;
+ sm_next_access_uid=0;
+ warp_inst_sm_next_uid=0;
+ operand_info_sm_next_uid = 1;
+ kernel_info_m_next_uid = 1;
+ g_num_ptx_inst_uid = 0;
+ g_ptx_cta_info_uid = 1;
+ symbol_sm_next_uid = 1;
+ function_info_sm_next_uid = 1;
+ debug_tensorcore = 0;
api = new cuda_runtime_api(this);
ptxinfo = new ptxinfo_data(this);
ptx_parser = new ptx_recognizer(this);
the_gpgpusim = new GPGPUsim_ctx(this);
func_sim = new cuda_sim(this);
-#if (CUDART_VERSION >= 5000)
device_runtime = new cuda_device_runtime(this);
-#endif
+ stats = new ptx_stats(this);
}
// global list
symbol_table *g_global_allfiles_symbol_table;
const char *g_filename;
+ unsigned sm_next_access_uid;
+ unsigned warp_inst_sm_next_uid;
+ unsigned operand_info_sm_next_uid;//uid for operand_info
+ unsigned kernel_info_m_next_uid;//uid for kernel_info_t
+ unsigned g_num_ptx_inst_uid; //uid for ptx inst inside ptx_instruction
+ unsigned long long g_ptx_cta_info_uid;
+ unsigned symbol_sm_next_uid; //uid for symbol
+ unsigned function_info_sm_next_uid;
+ std::vector<ptx_instruction*> s_g_pc_to_insn; // a direct mapping from PC to instruction
+ bool debug_tensorcore;
+
// objects pointers for each file
cuda_runtime_api* api;
ptxinfo_data* ptxinfo;
ptx_recognizer* ptx_parser;
GPGPUsim_ctx* the_gpgpusim;
cuda_sim* func_sim;
-#if (CUDART_VERSION >= 5000)
cuda_device_runtime* device_runtime;
-#endif
+ ptx_stats* stats;
// member function list
void cuobjdumpParseBinary(unsigned int handle);
class symbol_table *gpgpu_ptx_sim_load_ptx_from_string( const char *p, unsigned source_num );
@@ -43,6 +62,9 @@ class gpgpu_context {
class gpgpu_sim *gpgpu_ptx_sim_init_perf();
struct _cuda_device_id *GPGPUSim_Init();
void ptx_reg_options(option_parser_t opp);
+ const ptx_instruction* pc_to_instruction(unsigned pc);
+ const warp_inst_t *ptx_fetch_inst( address_type pc );
+ unsigned translate_pc_to_ptxlineno(unsigned pc);
};
gpgpu_context* GPGPU_Context();