void evg_gpu_init(void) { /* Classes */ CLASS_REGISTER(EvgGpu); /* Trace */ evg_trace_category = trace_new_category(); /* Try to open report file */ if (evg_gpu_report_file_name[0] && !file_can_open_for_write(evg_gpu_report_file_name)) fatal("%s: cannot open GPU pipeline report file", evg_gpu_report_file_name); /* Trace */ evg_trace_header("evg.init version=\"%d.%d\" num_compute_units=%d\n", EVG_TRACE_VERSION_MAJOR, EVG_TRACE_VERSION_MINOR, evg_gpu_num_compute_units); /* Create GPU */ evg_gpu = new(EvgGpu); /* Initializations */ evg_periodic_report_init(); evg_uop_init(); /* GPU-REL: read stack faults file */ evg_faults_init(); }
void X86CpuInit(void) { /* Classes */ CLASS_REGISTER(X86Cpu); CLASS_REGISTER(X86Core); CLASS_REGISTER(X86Thread); /* Trace */ x86_trace_category = trace_new_category(); }
/* Initialization */ void x86_cpu_init() { int core; /* Trace */ x86_trace_category = trace_new_category(); /* Register architecture */ x86_emu_arch->mem_config_check_func = x86_mem_config_check; x86_emu_arch->mem_config_default_func = x86_mem_config_default; x86_emu_arch->mem_config_parse_entry_func = x86_mem_config_parse_entry; /* Analyze CPU configuration file */ x86_cpu_config_check(); /* Initialize */ x86_cpu = xcalloc(1, sizeof(struct x86_cpu_t)); x86_cpu->uop_trace_list = linked_list_create(); /* Initialize cores */ x86_cpu->core = xcalloc(x86_cpu_num_cores, sizeof(struct x86_core_t)); X86_CORE_FOR_EACH x86_cpu_core_init(core); /* Components of an x86 CPU */ x86_reg_file_init(); x86_bpred_init(); x86_trace_cache_init(); x86_fetch_queue_init(); x86_uop_queue_init(); x86_rob_init(); x86_iq_init(); x86_lsq_init(); x86_event_queue_init(); x86_fu_init(); /* Trace */ x86_trace_header("x86.init version=\"%d.%d\" num_cores=%d num_threads=%d\n", X86_TRACE_VERSION_MAJOR, X86_TRACE_VERSION_MINOR, x86_cpu_num_cores, x86_cpu_num_threads); }
int main(int argc, char **argv) { /* Initial information */ fprintf(stderr, "\n"); fprintf(stderr, "; Multi2Sim %s - A Simulation Framework for CPU-GPU Heterogeneous Computing\n", VERSION); fprintf(stderr, "; Please use command 'm2s --help' for a list of command-line options.\n"); fprintf(stderr, "; Last compilation: %s %s\n", __DATE__, __TIME__); fprintf(stderr, "\n"); /* Read command line */ sim_read_command_line(&argc, argv); /* CPU disassembler tool */ if (*cpu_disasm_file_name) ke_disasm(cpu_disasm_file_name); /* GPU disassembler tool */ if (*gpu_disasm_file_name) gk_disasm(gpu_disasm_file_name); /* OpenGL disassembler tool */ if (*opengl_disasm_file_name) gl_disasm(opengl_disasm_file_name, opengl_disasm_shader_index); /* GPU visualization tool */ if (*gpu_visual_file_name) vgpu_run(gpu_visual_file_name); /* Memory hierarchy visualization tool */ if (*visual_file_name) vmem_run(visual_file_name); /* Network simulation tool */ if (*net_sim_network_name) net_sim(net_debug_file_name); /* Debug */ debug_init(); isa_inst_debug_category = debug_new_category(isa_inst_debug_file_name); isa_call_debug_category = debug_new_category(isa_call_debug_file_name); elf_debug_category = debug_new_category(elf_debug_file_name); net_debug_category = debug_new_category(net_debug_file_name); ld_debug_category = debug_new_category(loader_debug_file_name); sys_debug_category = debug_new_category(syscall_debug_file_name); ctx_debug_category = debug_new_category(ctx_debug_file_name); mem_debug_category = debug_new_category(mem_debug_file_name); opencl_debug_category = debug_new_category(opencl_debug_file_name); gpu_isa_debug_category = debug_new_category(gpu_isa_debug_file_name); gpu_stack_debug_category = debug_new_category(gpu_stack_debug_file_name); /* GPU-REL */ gpu_faults_debug_category = debug_new_category(gpu_faults_debug_file_name); /* GPU-REL */ gpu_pipeline_debug_category = debug_new_category(gpu_pipeline_debug_file_name); error_debug_category = debug_new_category(error_debug_file_name); esim_debug_init(esim_debug_file_name); /* Trace */ trace_init(trace_file_name); mem_trace_category = trace_new_category(); /* Initialization for functional simulation */ esim_init(); ke_init(); net_init(); /* Initialization for detailed simulation */ if (cpu_sim_kind == cpu_sim_detailed) cpu_init(); if (gpu_sim_kind == gpu_sim_detailed) gpu_init(); /* Memory hierarchy initialization, done after we initialized CPU cores * and GPU compute units. */ mem_system_init(); /* Load programs */ cpu_load_progs(argc, argv, ctxconfig_file_name); /* Simulation loop */ if (ke->running_list_head) { if (cpu_sim_kind == cpu_sim_detailed) cpu_run(); else ke_run(); } /* Flush event-driven simulation */ esim_process_all_events(0); /* Dump statistics summary */ sim_stats_summary(); /* Finalization of memory system */ mem_system_done(); /* Finalization of detailed CPU simulation */ if (cpu_sim_kind == cpu_sim_detailed) { esim_debug_done(); cpu_done(); } /* Finalization of detailed GPU simulation */ if (gpu_sim_kind == gpu_sim_detailed) gpu_done(); /* Finalization */ net_done(); esim_done(); trace_done(); ke_done(); debug_done(); mhandle_done(); /* End */ return 0; }