aboutsummaryrefslogtreecommitdiff
path: root/src/cuda-sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuda-sim')
-rw-r--r--src/cuda-sim/.ptx.y.swpbin36864 -> 0 bytes
-rw-r--r--src/cuda-sim/Makefile4
-rw-r--r--src/cuda-sim/cuda-math.h3
-rw-r--r--src/cuda-sim/cuda-sim.cc50
-rw-r--r--src/cuda-sim/half.h (renamed from src/cuda-sim/half.hpp)0
-rw-r--r--src/cuda-sim/instructions.cc431
-rw-r--r--src/cuda-sim/opcodes.def3
-rw-r--r--src/cuda-sim/opcodes.h7
-rw-r--r--src/cuda-sim/ptx.l13
-rw-r--r--src/cuda-sim/ptx.y2
-rw-r--r--src/cuda-sim/ptx_ir.cc6
-rw-r--r--src/cuda-sim/ptx_ir.h6
-rw-r--r--src/cuda-sim/ptx_loader.cc40
-rw-r--r--src/cuda-sim/ptx_loader.h2
-rw-r--r--src/cuda-sim/ptx_parser.cc12
-rw-r--r--src/cuda-sim/ptx_sim.h2
16 files changed, 57 insertions, 524 deletions
diff --git a/src/cuda-sim/.ptx.y.swp b/src/cuda-sim/.ptx.y.swp
deleted file mode 100644
index c8a83b5..0000000
--- a/src/cuda-sim/.ptx.y.swp
+++ /dev/null
Binary files differ
diff --git a/src/cuda-sim/Makefile b/src/cuda-sim/Makefile
index d08a696..999dad7 100644
--- a/src/cuda-sim/Makefile
+++ b/src/cuda-sim/Makefile
@@ -42,7 +42,7 @@ include ../../version_detection.mk
OUTPUT_DIR=$(SIM_OBJ_FILES_DIR)/cuda-sim
-OPT := -O0 -g3 -Wall -Wno-unused-function -Wno-sign-compare
+OPT := -O3 -g3 -Wall -Wno-unused-function -Wno-sign-compare
ifeq ($(DEBUG),1)
OPT := -g3 -Wall -Wno-unused-function -Wno-sign-compare
endif
@@ -62,7 +62,7 @@ ifeq ($(GNUC_CPP0X),1)
endif
endif
-OBJS := $(OUTPUT_DIR)/ptx_parser.o $(OUTPUT_DIR)/ptx_loader.o $(OUTPUT_DIR)/cuda_device_printf.o $(OUTPUT_DIR)/instructions.o $(OUTPUT_DIR)/cuda-sim.o $(OUTPUT_DIR)/ptx_ir.o $(OUTPUT_DIR)/ptx_sim.o $(OUTPUT_DIR)/memory.o $(OUTPUT_DIR)/ptx-stats.o $(OUTPUT_DIR)/decuda_pred_table/decuda_pred_table.o $(OUTPUT_DIR)/ptx.tab.o $(OUTPUT_DIR)/lex.ptx_.o $(OUTPUT_DIR)/ptxinfo.tab.o $(OUTPUT_DIR)/lex.ptxinfo_.o $(OUTPUT_DIR)/cuda_device_runtime.o
+OBJS := $(OUTPUT_DIR)/ptx_parser.o $(OUTPUT_DIR)/ptx_loader.o $(OUTPUT_DIR)/cuda_device_printf.o $(OUTPUT_DIR)/instructions.o $(OUTPUT_DIR)/cuda-sim.o $(OUTPUT_DIR)/ptx_ir.o $(OUTPUT_DIR)/ptx_sim.o $(OUTPUT_DIR)/memory.o $(OUTPUT_DIR)/ptx-stats.o $(OUTPUT_DIR)/decuda_pred_table/decuda_pred_table.o $(OUTPUT_DIR)/ptx.tab.o $(OUTPUT_DIR)/lex.ptx_.o $(OUTPUT_DIR)/ptxinfo.tab.o $(OUTPUT_DIR)/lex.ptxinfo_.o $(OUTPUT_DIR)/cuda_device_runtime.o
OPT += -DCUDART_VERSION=$(CUDART_VERSION)
diff --git a/src/cuda-sim/cuda-math.h b/src/cuda-sim/cuda-math.h
index 314f813..a5db337 100644
--- a/src/cuda-sim/cuda-math.h
+++ b/src/cuda-sim/cuda-math.h
@@ -68,6 +68,8 @@
#ifndef CUDA_MATH
#define CUDA_MATH
+#include <cmath>
+
// cuda math implementations
#undef max
#undef min
@@ -149,6 +151,7 @@ float __ll2float_rd(long long int a) {
#include <device_types.h>
#include <fenv.h>
+
// 32-bit integer to float
float __int2float_rn(int a) {
int orig_rnd_mode = fegetround();
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index dd7edd9..7587db7 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -542,7 +542,7 @@ void ptx_instruction::set_mul_div_or_other_archop(){
sp_op=INT_DIV_OP;
break;
default:
- if((op==ALU_OP)||(op==VP_CORE_OP))
+ if((op==ALU_OP))
sp_op=INT__OP;
break;
}
@@ -649,11 +649,9 @@ void ptx_instruction::set_opcode_and_latency()
break;
case LD_OP: op = LOAD_OP; break;
case MMA_LD_OP: op = TENSOR_CORE_LOAD_OP; break;
- case VP_LD_OP: op = VP_LOAD_OP; break;
case LDU_OP: op = LOAD_OP; break;
case ST_OP: op = STORE_OP; break;
case MMA_ST_OP: op = TENSOR_CORE_STORE_OP; break;
- case VP_ST_OP: op = VP_STORE_OP; break;
case BRA_OP: op = BRANCH_OP; break;
case BREAKADDR_OP: op = BRANCH_OP; break;
case TEX_OP: op = LOAD_OP; mem_op=TEX; break;
@@ -801,26 +799,6 @@ void ptx_instruction::set_opcode_and_latency()
initiation_interval = 64;
op=TENSOR_CORE_OP;
break;
- case VP_MMA_OP:
- if(get_wmma_type()==VP_MMA4)
- {
- latency = 64;
- initiation_interval = 64;
- }
- if(get_wmma_type()==VP_MMA8)
- {
- latency =128;
- initiation_interval = 128;
- }
- if(get_wmma_type()==VP_MMA16)
- {
- latency = 256;
- initiation_interval = 256;
- }
- op=VP_CORE_OP;
- op=VP_CORE_OP;
- op=VP_CORE_OP;
- break;
case SHFL_OP:
latency = 32;
initiation_interval = 15;
@@ -922,10 +900,10 @@ void ptx_instruction::pre_decode()
case WT_OPTION: cache_op = CACHE_WRITE_THROUGH; break;
default:
//if( m_opcode == LD_OP || m_opcode == LDU_OP )
- if( m_opcode ==VP_LD_OP || m_opcode == MMA_LD_OP || m_opcode == LD_OP || m_opcode == LDU_OP )
+ if( m_opcode == MMA_LD_OP || m_opcode == LD_OP || m_opcode == LDU_OP )
cache_op = CACHE_ALL;
//else if( m_opcode == ST_OP )
- else if( m_opcode == VP_ST_OP ||m_opcode == MMA_ST_OP || m_opcode == ST_OP )
+ else if( m_opcode == MMA_ST_OP || m_opcode == ST_OP )
cache_op = CACHE_WRITE_BACK;
else if( m_opcode == ATOM_OP )
cache_op = CACHE_GLOBAL;
@@ -1295,14 +1273,6 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id)
addr_t pc = next_instr();
assert( pc == inst.pc ); // make sure timing model and functional model are in sync
const ptx_instruction *pI = m_func_info->get_instruction(pc);
- //#if 0
- if(lane_id==0){
- //printf("EXECUTION_FLOW:LINE_NUM:%d\n",pI->source_line());
- printf("EXECUTION_FLOW:LINE_NUM:%d\n",pI->source_line());
- printf("EXECUTION_FLOW:INST:%s\n",pI->get_source());
- printf("EXECUTION_FLOW:PC%d\n",pc);
- }
- //#endif
set_npc( pc + pI->inst_size() );
@@ -1349,12 +1319,12 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id)
pI = pJ;
}
- if(((inst_opcode==MMA_OP||inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP||inst_opcode==VP_MMA_OP||inst_opcode==VP_LD_OP||inst_opcode==VP_ST_OP))){
+ if(((inst_opcode==MMA_OP||inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP))){
if(inst.active_count()!=MAX_WARP_SIZE)
while(1);
}
- if(((inst_opcode!=MMA_OP)&&(inst_opcode!=MMA_LD_OP)&&(inst_opcode!=MMA_ST_OP)&&(inst_opcode!=VP_LD_OP)&&(inst_opcode!=VP_ST_OP)&&(inst_opcode!=VP_MMA_OP))||((inst_opcode==MMA_OP||inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP||inst_opcode==VP_MMA_OP||inst_opcode==VP_LD_OP||inst_opcode==VP_ST_OP)&&(lane_id==0))){
+ if(((inst_opcode!=MMA_OP)&&(inst_opcode!=MMA_LD_OP)&&(inst_opcode!=MMA_ST_OP))||((inst_opcode==MMA_OP||inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP)&&(lane_id==0))){
switch ( inst_opcode ) {
#define OP_DEF(OP,FUNC,STR,DST,CLASSIFICATION) case OP: FUNC(pI,this); op_classification = CLASSIFICATION; break;
#define OP_W_DEF(OP,FUNC,STR,DST,CLASSIFICATION) case OP: FUNC(pI,get_core(),inst); op_classification = CLASSIFICATION; break;
@@ -1405,8 +1375,7 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id)
_memory_op_t insn_memory_op = no_memory_op;
unsigned insn_data_size = 0;
if ( (pI->has_memory_read() || pI->has_memory_write()) ) {
- if(!((inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP||inst_opcode==VP_LD_OP||inst_opcode==VP_ST_OP)))
- //if(!((inst_opcode==MMA_LD_OP||inst_opcode==VP_LD_OP)))
+ if(!((inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP)))
{
insn_memaddr = last_eaddr();
insn_space = last_space();
@@ -1480,15 +1449,14 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id)
if ( (g_ptx_sim_num_insn % 100000) == 0 ) {
dim3 ctaid = get_ctaid();
dim3 tid = get_tid();
- printf("GPGPU-Sim PTX: %u instructions simulated : ctaid=(%u,%u,%u) tid=(%u,%u,%u)\n",
+ DPRINTF(LIVENESS, "GPGPU-Sim PTX: %u instructions simulated : ctaid=(%u,%u,%u) tid=(%u,%u,%u)\n",
g_ptx_sim_num_insn, ctaid.x,ctaid.y,ctaid.z,tid.x,tid.y,tid.z );
fflush(stdout);
}
// "Return values"
if(!skip) {
- if(!((inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP||inst_opcode==VP_LD_OP||inst_opcode==VP_ST_OP)))
- //if(!((inst_opcode==MMA_LD_OP||inst_opcode==VP_LD_OP)))
+ if(!((inst_opcode==MMA_LD_OP||inst_opcode==MMA_ST_OP)))
{
inst.space = insn_space;
inst.set_addr(lane_id, insn_memaddr);
@@ -2150,7 +2118,7 @@ struct rec_pts {
int s_num_recon;
};
-struct std::map<function_info*,rec_pts> g_rpts;
+class std::map<function_info*,rec_pts> g_rpts;
struct rec_pts find_reconvergence_points( function_info *finfo )
{
diff --git a/src/cuda-sim/half.hpp b/src/cuda-sim/half.h
index 8f1a8eb..8f1a8eb 100644
--- a/src/cuda-sim/half.hpp
+++ b/src/cuda-sim/half.h
diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc
index 52d89f2..2677c40 100644
--- a/src/cuda-sim/instructions.cc
+++ b/src/cuda-sim/instructions.cc
@@ -25,7 +25,7 @@
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#include "half.hpp"
+#include "half.h"
#include "instructions.h"
#include "ptx_ir.h"
#include "opcodes.h"
@@ -48,7 +48,7 @@
using half_float::half;
unsigned ptx_instruction::g_num_ptx_inst_uid=0;
-bool g_debug_instruction = 1;
+bool g_debug_instruction = 0;
const char *g_opcode_string[NUM_OPCODES] = {
@@ -129,15 +129,6 @@ unsigned thread_group_offset(int thread,unsigned wmma_type,unsigned wmma_layout
}
}
break;
- case VP_MMA:
- case VP_MMA4:
- case VP_MMA8:
- case VP_MMA16:
- if(wmma_layout==ROW)
- offset=load_c_float_row[thread_group]+16*in_tg_index;
- else
- offset=load_c_float_col[thread_group]+in_tg_index;
- break;
default:
abort();
@@ -1706,11 +1697,6 @@ void mapping(int thread,int wmma_type,int wmma_layout,int type,int index,int str
}
assg_offset=index;
}
- else if(wmma_type==VP_MMA || wmma_type==VP_MMA4 || wmma_type==VP_MMA8 || wmma_type==VP_MMA16){
- row=c_row_offset[thread/4]+thread%4;
- col=c_col_offset[thread/4]+index;
- assg_offset=index;
- }
if(wmma_type==LOAD_A||wmma_type==LOAD_B){
if(wmma_layout==ROW){
@@ -1724,152 +1710,6 @@ void mapping(int thread,int wmma_type,int wmma_layout,int type,int index,int str
}
}
-void vp_mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
-{
- int i,j,k,thrd;
- int row,col,offset;
- ptx_reg_t matrix_a[16][16];
- ptx_reg_t matrix_b[16][16];
- ptx_reg_t matrix_c[16][16];
- ptx_reg_t matrix_d[16][16];
- ptx_reg_t src_data;
- ptx_thread_info *thread;
- int stride;
- unsigned wmma_type = pI->get_wmma_type();
- unsigned a_layout = pI->get_wmma_layout(0);
- unsigned b_layout = pI->get_wmma_layout(1);
- unsigned type = pI->get_type();
- int tid = inst.warp_id_func() * core->get_warp_size();
- const operand_info &dst = pI->operand_lookup(0);
-
- unsigned thread_group_index;
-
- for (thrd=0; thrd < core->get_warp_size(); thrd++){
- thread = core->get_thread_info()[tid+thrd];
- if(g_debug_instruction)
- printf("THREAD=%d\n:",thrd);
- for(i=1;i<=3;i++){
- const operand_info &src_a= pI->operand_lookup(i);
- unsigned nelem = src_a.get_vect_nelem();
- ptx_reg_t v[8];
- thread->get_vector_operand_values( src_a, v, nelem );
- if(g_debug_instruction){
- printf("Thread%d_Iteration=%d:",thrd,i);
- for(k=0;k<nelem;k++){
- printf("%x ",v[k].u64);
- }
- printf("\n");
- }
- int hex_val;
- switch(i) {
- case 1 ://operand 1
- for(k=0;k<8;k++){
- mapping(thrd,wmma_type,a_layout,S32_TYPE,k,16,row,col,offset);
- if(g_debug_instruction)
- printf("A:thread=%d,row=%d,col=%d,offset=%d\n",thrd,row,col,offset);
- matrix_a[row][col]=v[offset];
- }
- break;
- case 2 ://operand 2
- for(k=0;k<8;k++){
- mapping(thrd,wmma_type,b_layout,S32_TYPE,k,16,row,col,offset);
- if(g_debug_instruction)
- printf("B:thread=%d,row=%d,col=%d,offset=%d\n",thrd,row,col,offset);
- if(nelem==1){
- matrix_b[row][col].s32=((v[0].u32&(0xf<<4*k))>>4*k);
- }
- if(nelem==2){
- matrix_b[row][col].s32=((v[k/4].u32&(0xff<<8*(k%4)))>>8*(k%4));
- }
- if(nelem==4){
- matrix_b[row][col].s32=((v[k/2].u32&(0xffff<<16*(k%2)))>>16*(k%2));
- }
- }
- break;
- case 3 ://operand 3
- for(k=0;k<8;k++){
- mapping(thrd,wmma_type,ROW,S32_TYPE,k,16,row,col,offset);
- if(g_debug_instruction)
- printf("C:thread=%d,row=%d,col=%d,offset=%d\n",thrd,row,col,offset);
- matrix_c[row][col]=v[offset];
- }
- break;
- default :
- printf("Invalid Operand Index\n" );
- }
- }
- if(g_debug_instruction)
- printf("\n");
- }
- if(g_debug_instruction){
- printf("MATRIX_A\n");
- for (i=0;i<16;i++){
- for(j=0;j<16;j++){
- printf("%d ",matrix_a[i][j].s32);
- }
- printf("\n");
- }
- }
- printf("MATRIX_B\n");
- for (i=0;i<16;i++){
- for(j=0;j<16;j++){
- printf("%d ",matrix_b[i][j].s32);
- }
- printf("\n");
- }
- printf("MATRIX_C\n");
- for (i=0;i<16;i++){
- for(j=0;j<16;j++){
- printf("%d ",matrix_c[i][j].s32);
- }
- printf("\n");
- }
- for (i=0;i<16;i++){
- for(j=0;j<16;j++){
- matrix_d[i][j].f16=0;
- }
- }
-
- for (i=0;i<16;i++){
- for(j=0;j<16;j++){
- for(k=0;k<16;k++){
- matrix_d[i][j].s32=matrix_d[i][j].s32+matrix_a[i][k].s32*matrix_b[k][j].s32;
- }
- matrix_d[i][j].s32+=matrix_c[i][j].s32;
- }
- }
- if(g_debug_instruction){
- printf("MATRIX_D\n");
- for (i=0;i<16;i++){
- for(j=0;j<16;j++){
- printf("%d ",matrix_d[i][j].s32);
- }
- printf("\n");
- }
- }
- for (thrd=0; thrd < core->get_warp_size(); thrd++){
- int row_t[8];
- int col_t[8];
- for(k=0;k<8;k++){
- mapping(thrd,wmma_type,ROW,type,k,16,row_t[k],col_t[k],offset);
- if(g_debug_instruction)
- printf("vp_mma:row:%d,col%d\n",row_t[k],col_t[k]);
- }
- thread = core->get_thread_info()[tid+thrd];
-
-
- thread->set_wmma_vector_operand_values(dst,matrix_d[row_t[0]][col_t[0]],matrix_d[row_t[1]][col_t[1]],matrix_d[row_t[2]][col_t[2]],matrix_d[row_t[3]][col_t[3]],matrix_d[row_t[4]][col_t[4]],matrix_d[row_t[5]][col_t[5]],matrix_d[row_t[6]][col_t[6]],matrix_d[row_t[7]][col_t[7]]);
-
- if(g_debug_instruction)
- {
- printf("thread%d:",thrd);
- for(k=0;k<8;k++){
- printf("%d ",matrix_d[row_t[k]][col_t[k]].s32);
- }
- printf("\n");
- }
- }
-}
void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
{
int i,j,k,thrd;
@@ -2387,18 +2227,10 @@ ptx_reg_t f2x( ptx_reg_t x, unsigned from_width, unsigned to_width, int to_sign,
} else {
switch ( to_width ) {
case 16:
- mytemp=half(x.f32);
- myfloat=mytemp;
- y.f16 =mytemp;
- #if 0
- printf("f2x: %f\n",myfloat);
- #endif
+ y.f16 =half_float::half_cast<half,std::numeric_limits<float>::round_style>(x.f32);//mytemp;
break;
case 32:
y.f32=float(x.f16);
- #if 0
- printf("f2xnew:%x:my%f:%f\n",x.f16,y.f32,half_float::detail::half2float<float>(x.u16));
- #endif
break; // handled by f2f
case 64:
y.f64 = x.f32;
@@ -3119,78 +2951,6 @@ void ldu_impl( const ptx_instruction *pI, ptx_thread_info *thread )
ld_exec(pI,thread);
}
-void vp_st_impl( const ptx_instruction *pI, core_t *core, warp_inst_t & inst)
-{
- size_t size;
- unsigned smid;
- int t;
- int thrd,odd,inx,k;
- ptx_thread_info *thread;
-
- const operand_info &src = pI->operand_lookup(1);
- const operand_info &src1 = pI->operand_lookup(0);
- const operand_info &src2 = pI->operand_lookup(2);
- int tid = inst.warp_id_func()*core->get_warp_size();
- unsigned type = pI->get_type();
- unsigned wmma_type = pI->get_wmma_type();
- unsigned wmma_layout = pI->get_wmma_layout(0);
- int stride;
- _memory_op_t insn_memory_op = pI->has_memory_read() ? memory_load : memory_store;
- for (thrd=0; thrd < core->get_warp_size(); thrd++) {
- thread = core->get_thread_info()[tid+thrd];
- odd=thrd%2;
- inx=thrd/2;
- ptx_reg_t addr_reg = thread->get_operand_value(src1, src, type, thread, 1);
- ptx_reg_t src2_data = thread->get_operand_value(src2, src, type, thread, 1);
- const operand_info &src_a= pI->operand_lookup(1);
- unsigned nelem = src_a.get_vect_nelem();
- ptx_reg_t* v= new ptx_reg_t[8];
- thread->get_vector_operand_values( src_a, v, nelem );
- stride=src2_data.u32;
-
- memory_space_t space = pI->get_space();
- new_addr_type mem_txn_addr[MAX_ACCESSES_PER_INSN_PER_THREAD];
- int num_mem_txn=0;
-
- memory_space *mem = NULL;
- addr_t addr = addr_reg.u32;
-
- smid = thread->get_hw_sid();
- if( whichspace(addr) == shared_space ) {
- addr= generic_to_shared(smid,addr);
- space = shared_space;
- }
- decode_space(space,thread,src1,mem,addr);
-
- type_info_key::type_decode(type,size,t);
- if(g_debug_instruction)
- printf("vp_st: thrd=%d,addr=%x, fp(size=%d), stride=%d\n",thrd,addr_reg.u32,size,src2_data.u32);
- addr_t new_addr = addr+thread_group_offset(thrd,VP_MMA,wmma_layout,type,stride)*size/8;
-
- if(g_debug_instruction){
- printf("vp_st:thread%d=%d,%d,%d,%d,%d,%d,%d,%d\n",thrd,v[0].s32,v[1].s32,v[2].s32,v[3].s32,v[4].s32,v[5].s32,v[6].s32,v[7].s32);
- }
-
- for(k=0;k<8;k++){
- if(wmma_layout==ROW){
- mem->write(new_addr+4*k,size/8,&v[k].s64,thread,pI);
- mem_txn_addr[num_mem_txn++]=new_addr+4*k;
- }
- else if(wmma_layout==COL){
- mem->write(new_addr+k*4*stride,size/8,&v[k].s64,thread,pI);
- mem_txn_addr[num_mem_txn++]=new_addr+4*k*stride;
- }
- }
-
- delete [] v;
- inst.space = space;
- inst.set_addr(thrd, (new_addr_type *)mem_txn_addr , num_mem_txn);
- inst.data_size = 4; // 4 byte transaction
- assert( inst.memory_op == insn_memory_op );
-// thread->m_last_effective_address = addr;
-// thread->m_last_memory_space = space;
- }
-}
void mma_st_impl( const ptx_instruction *pI, core_t *core, warp_inst_t &inst )
{
size_t size;
@@ -3296,191 +3056,6 @@ void mma_st_impl( const ptx_instruction *pI, core_t *core, warp_inst_t &inst )
//thread->m_last_memory_space = space;
}
}
-void vp_ld_impl(const ptx_instruction *pI, core_t *core, warp_inst_t &inst)
-{
- size_t size;
- int t,i;
- unsigned smid;
- const operand_info &dst = pI->dst();
- const operand_info &src1 = pI->src1();
- const operand_info &src2 = pI->src2();
- unsigned type = pI->get_type();
- unsigned wmma_type = pI->get_wmma_type();
- unsigned wmma_layout = pI->get_wmma_layout(0);
- int tid = inst.warp_id_func()*core->get_warp_size();
- int thrd,stride;
- ptx_thread_info *thread;
- _memory_op_t insn_memory_op = pI->has_memory_read() ? memory_load : memory_store;
- for (thrd=0; thrd < core->get_warp_size(); thrd++){
- thread = core->get_thread_info()[tid+thrd];
- ptx_reg_t src1_data = thread->get_operand_value(src1, dst, U32_TYPE, thread, 1);
- ptx_reg_t src2_data = thread->get_operand_value(src2, dst, U32_TYPE, thread, 1);
- stride=src2_data.u32;
- memory_space_t space = pI->get_space();
-
- new_addr_type mem_txn_addr[MAX_ACCESSES_PER_INSN_PER_THREAD];
- int num_mem_txn=0;
-
- memory_space *mem = NULL;
- addr_t addr = src1_data.u32;
-
- smid = thread->get_hw_sid();
- if( whichspace(addr) == shared_space ) {
- addr= generic_to_shared(smid,addr);
- space = shared_space;
- }
-
- decode_space(space,thread,src1,mem,addr);
- type_info_key::type_decode(type,size,t);
-
- ptx_reg_t data[8];
- addr_t new_addr;
-
- //note we are using distribution of VP_MMA for every type of load!
- if(wmma_type==LOAD_A||wmma_type==LOAD_C){
- new_addr = addr+thread_group_offset(thrd,VP_MMA,wmma_layout,type,stride)*size/8;
- }
- else if(wmma_type==LOAD_B4){
- new_addr = addr+thread_group_offset(thrd,VP_MMA,wmma_layout,type,stride)/2;
- }
- else if (wmma_type==LOAD_B8){
- new_addr = addr+thread_group_offset(thrd,VP_MMA,wmma_layout,type,stride);
- }
- else if (wmma_type==LOAD_B16){
- new_addr = addr+thread_group_offset(thrd,VP_MMA,wmma_layout,type,stride)*2;
- }
-
- if(g_debug_instruction)
- printf("vp_ld: thrx=%d,addr=%x, base_addr=%x, size=%d, stride=%d\n",thrd,new_addr,addr,size,src2_data.u32);
-
- if(wmma_type==LOAD_A||wmma_type==LOAD_C){
- printf("lda/c:");
- for(i=0;i<8;i++){
- if(wmma_layout==ROW){
- //mem->read(new_addr+4*i,size/8,&data[i].s64);
- mem->read(new_addr+4*i,size/8,&data[i].s64);
- printf("%x ", new_addr+4*i);
- mem_txn_addr[num_mem_txn++]=new_addr+4*i;
- }
- else if(wmma_layout==COL){
- //mem->read(new_addr+4*stride*i,size/8,&data[i].s64);
- printf("%x ", new_addr+4*stride*i);
- mem->read(new_addr+4*stride*i,size/8,&data[i].s64);
- mem_txn_addr[num_mem_txn++]=new_addr+4*stride*i;
- }
- }
-
- }
-
- else if(wmma_type==LOAD_B4){
- printf("ldb4:");
- if(wmma_layout==ROW){
- mem->read(new_addr,size/8,&data[0].s64);
- printf("%x ",new_addr);
- mem_txn_addr[num_mem_txn++]=new_addr;
- }
- else if(wmma_layout==COL){
- }
- }
- else if(wmma_type==LOAD_B8){
- printf("ldb8:");
- if(wmma_layout==ROW){
- mem->read(new_addr,size/8,&data[0].s64);
- mem->read(new_addr+4,size/8,&data[1].s64);
- printf("%x ",new_addr,new_addr+4);
-
- mem_txn_addr[num_mem_txn++]=new_addr;
- mem_txn_addr[num_mem_txn++]=new_addr+4;
- }
- else if(wmma_layout==COL){
-
- }
- }
- else if(wmma_type==LOAD_B16){
- printf("ldb16:");
- if(wmma_layout==ROW){
- mem->read(new_addr,size/8,&data[0].s64);
- mem->read(new_addr+4,size/8,&data[1].s64);
- mem->read(new_addr+8,size/8,&data[2].s64);
- mem->read(new_addr+12,size/8,&data[3].s64);
- printf("%x ",new_addr,new_addr+4,new_addr+8,new_addr+12);
- mem_txn_addr[num_mem_txn++]=new_addr;
- mem_txn_addr[num_mem_txn++]=new_addr+4;
- mem_txn_addr[num_mem_txn++]=new_addr+8;
- mem_txn_addr[num_mem_txn++]=new_addr+12;
- }
- else if(wmma_layout==COL){
- }
- }
- else{
- printf("wrong vp_load type\n");;
- abort();
- }
- printf("\n");
-
- //generate timing memory request
- inst.space = space;
- inst.set_addr(thrd, (new_addr_type *)mem_txn_addr , num_mem_txn);
- inst.data_size = 4; // 4 byte transaction
- assert( inst.memory_op == insn_memory_op );
- printf("\nVPLOAD_THREAD%d:",thrd);
- for(int lll=0;lll<num_mem_txn;lll++)
- {
- printf("%x ",mem_txn_addr[lll]);
- }
- printf("\n");
-
- int num_reg;
- if(g_debug_instruction){
- printf("\nvp_ld:thread%d= ",thrd);
- if((wmma_type==LOAD_A)||(wmma_type==LOAD_C)){
- num_reg=8;
- }
- else if(wmma_type==LOAD_B4){
- num_reg=1;
- }
- else if(wmma_type==LOAD_B8){
- num_reg=2;
- }
- else if(wmma_type==LOAD_B16){
- num_reg=4;
- }
- for(i=0;i<num_reg;i++){
- printf("%x ",data[i].s32);
- }
- printf("\n");
- }
-
- if((wmma_type==LOAD_A)||(wmma_type==LOAD_C)){
- thread->set_wmma_vector_operand_values(dst,data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
- }
- else if(wmma_type==LOAD_B4){
- thread->set_vector_operand_values(dst,data[0],data[0],data[0],data[0]);
- }
- else if(wmma_type==LOAD_B8){
- thread->set_vector_operand_values(dst,data[0],data[1],data[1],data[1]);
- }
- else if (wmma_type==LOAD_B16){
- thread->set_vector_operand_values(dst,data[0],data[1],data[2],data[3]);
- }
- else
- abort();
-
-
-
- if(g_debug_instruction){
- for(int i=0;i<num_reg;i++)
- printf("vp_ld:data[%i].s64=%x\n",i,data[i].u64);
- }
-
-
- //thread->m_last_effective_address = addr;
- //thread->m_last_memory_space = space;
- }
-
-
-
-}
void mma_ld_impl( const ptx_instruction *pI, core_t *core, warp_inst_t &inst )
{
diff --git a/src/cuda-sim/opcodes.def b/src/cuda-sim/opcodes.def
index 73f6161..e6f957a 100644
--- a/src/cuda-sim/opcodes.def
+++ b/src/cuda-sim/opcodes.def
@@ -55,9 +55,6 @@ OP_DEF(BRKPT_OP,brkpt_impl,"brkpt",1,9)
OP_W_DEF(MMA_OP,mma_impl,"mma",1,1)
OP_W_DEF(MMA_LD_OP,mma_ld_impl,"mma_load",1,5)
OP_W_DEF(MMA_ST_OP,mma_st_impl,"mma_store",0,5)
-OP_W_DEF(VP_MMA_OP,vp_mma_impl,"vp_mma",1,1)
-OP_W_DEF(VP_LD_OP,vp_ld_impl,"vp_load",1,5)
-OP_W_DEF(VP_ST_OP,vp_st_impl,"vp_store",0,5)
OP_DEF(CALL_OP,call_impl,"call",1,3)
OP_DEF(CALLP_OP,callp_impl,"callp",1,3)
OP_DEF(CLZ_OP,clz_impl,"clz",1,1)
diff --git a/src/cuda-sim/opcodes.h b/src/cuda-sim/opcodes.h
index ad8d8f1..b91d92f 100644
--- a/src/cuda-sim/opcodes.h
+++ b/src/cuda-sim/opcodes.h
@@ -63,16 +63,9 @@ enum special_regs {
enum wmma_type{
LOAD_A,
LOAD_B,
- LOAD_B4,//vp
- LOAD_B8,//vp
- LOAD_B16,//vp
LOAD_C,
STORE_D,
MMA,
- VP_MMA,
- VP_MMA4,
- VP_MMA8,
- VP_MMA16,
ROW,
COL,
M16N16K16
diff --git a/src/cuda-sim/ptx.l b/src/cuda-sim/ptx.l
index 9c78e9f..ab640d7 100644
--- a/src/cuda-sim/ptx.l
+++ b/src/cuda-sim/ptx.l
@@ -36,7 +36,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "ptx.tab.h"
#include <string.h>
-char linebuf[1024];
+char linebuf[4096];
unsigned col = 0;
#define TC col+=strlen(ptx_text);
#define CHECK_UNSIGNED \
@@ -72,9 +72,6 @@ brkpt TC; ptx_lval.int_value = BRKPT_OP; return OPCODE;
wmma TC; ptx_lval.int_value = MMA_OP; return OPCODE;
wmma\.load TC; ptx_lval.int_value = MMA_LD_OP; return OPCODE;
wmma\.store TC; ptx_lval.int_value = MMA_ST_OP; return OPCODE;
-vp\.load TC; ptx_lval.int_value=VP_LD_OP; return OPCODE;
-vp\.store TC; ptx_lval.int_value=VP_ST_OP; return OPCODE;
-vp TC; ptx_lval.int_value=VP_MMA_OP; return OPCODE;
call TC; BEGIN(NOT_OPCODE); ptx_lval.int_value = CALL_OP; return OPCODE; // blocking opcode token in case the callee has the same name as an opcode
callp TC; BEGIN(NOT_OPCODE); ptx_lval.int_value = CALLP_OP; return OPCODE;
@@ -165,12 +162,6 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE;
\.c\.sync TC; ptx_lval.int_value = LOAD_C; return WMMA_DIRECTIVE;
\.d\.sync TC; ptx_lval.int_value = STORE_D; return WMMA_DIRECTIVE;
\.mma\.sync TC;ptx_lval.int_value=MMA; return WMMA_DIRECTIVE;
-\.mma4\.sync TC;ptx_lval.int_value=VP_MMA4; return WMMA_DIRECTIVE;
-\.mma8\.sync TC;ptx_lval.int_value=VP_MMA8; return WMMA_DIRECTIVE;
-\.mma16\.sync TC;ptx_lval.int_value=VP_MMA16; return WMMA_DIRECTIVE;
-\.b4\.sync TC; ptx_lval.int_value=LOAD_B4; return WMMA_DIRECTIVE;
-\.b8\.sync TC; ptx_lval.int_value=LOAD_B8; return WMMA_DIRECTIVE;
-\.b16\.sync TC; ptx_lval.int_value=LOAD_B16; return WMMA_DIRECTIVE;
\.row TC; ptx_lval.int_value = ROW; return LAYOUT;
\.col TC; ptx_lval.int_value = COL; return LAYOUT;
@@ -415,7 +406,7 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE;
"//"[^\n]* TC; // eat single
-\n.* col=0; strncpy(linebuf, yytext + 1, 1024); yyless( 1 );
+\n.* col=0; strncpy(linebuf, yytext + 1, sizeof(linebuf)); yyless( 1 );
" " TC;
"\t" TC;
diff --git a/src/cuda-sim/ptx.y b/src/cuda-sim/ptx.y
index 54ac2bc..8b901a3 100644
--- a/src/cuda-sim/ptx.y
+++ b/src/cuda-sim/ptx.y
@@ -279,6 +279,7 @@ ptr_spec: /*empty*/
ptr_space_spec: GLOBAL_DIRECTIVE { add_ptr_spec(global_space); }
| LOCAL_DIRECTIVE { add_ptr_spec(local_space); }
| SHARED_DIRECTIVE { add_ptr_spec(shared_space); }
+ | CONST_DIRECTIVE { add_ptr_spec(global_space); }
ptr_align_spec: ALIGN_DIRECTIVE INT_OPERAND
@@ -340,6 +341,7 @@ var_spec_list: var_spec
var_spec: space_spec
| type_spec
| align_spec
+ | VISIBLE_DIRECTIVE
| EXTERN_DIRECTIVE { add_extern_spec(); }
| WEAK_DIRECTIVE
;
diff --git a/src/cuda-sim/ptx_ir.cc b/src/cuda-sim/ptx_ir.cc
index 9800e1e..d12c741 100644
--- a/src/cuda-sim/ptx_ir.cc
+++ b/src/cuda-sim/ptx_ir.cc
@@ -1089,15 +1089,9 @@ ptx_instruction::ptx_instruction( int opcode,
case SYNC_OPTION:
case LOAD_A:
case LOAD_B:
- case LOAD_B4:
- case LOAD_B8:
- case LOAD_B16:
case LOAD_C:
case STORE_D:
case MMA:
- case VP_MMA4:
- case VP_MMA8:
- case VP_MMA16:
m_wmma_type=last_ptx_inst_option;
break;
case ROW:
diff --git a/src/cuda-sim/ptx_ir.h b/src/cuda-sim/ptx_ir.h
index e025013..0767379 100644
--- a/src/cuda-sim/ptx_ir.h
+++ b/src/cuda-sim/ptx_ir.h
@@ -105,7 +105,7 @@ private:
int m_is_function;
bool m_is_non_arch_reg;
- friend class type_info_key_compare;
+ friend struct type_info_key_compare;
};
class symbol_table;
@@ -1093,7 +1093,7 @@ public:
int membar_level() const { return m_membar_level; }
bool has_memory_read() const {
- if( m_opcode == LD_OP || m_opcode == LDU_OP || m_opcode == TEX_OP|| m_opcode==MMA_LD_OP || m_opcode==VP_LD_OP)
+ if( m_opcode == LD_OP || m_opcode == LDU_OP || m_opcode == TEX_OP|| m_opcode==MMA_LD_OP )
return true;
// Check PTXPlus operand type below
// Source operands are memory operands
@@ -1105,7 +1105,7 @@ public:
return false;
}
bool has_memory_write() const {
- if( m_opcode == ST_OP || m_opcode==MMA_ST_OP || m_opcode==VP_ST_OP ) return true;
+ if( m_opcode == ST_OP || m_opcode==MMA_ST_OP ) return true;
// Check PTXPlus operand type below
// Destination operand is a memory operand
ptx_instruction::const_iterator op=op_iter_begin();
diff --git a/src/cuda-sim/ptx_loader.cc b/src/cuda-sim/ptx_loader.cc
index 6c1b595..11d9013 100644
--- a/src/cuda-sim/ptx_loader.cc
+++ b/src/cuda-sim/ptx_loader.cc
@@ -54,6 +54,7 @@ extern int ptxinfo_debug;
extern FILE *ptxinfo_in;
static bool g_save_embedded_ptx;
+static int g_occupancy_sm_number;
bool g_keep_intermediate_files;
bool m_ptx_save_converted_ptxplus;
@@ -71,6 +72,10 @@ void ptx_reg_options(option_parser_t opp)
&m_ptx_save_converted_ptxplus,
"Saved converted ptxplus to a file",
"0");
+ option_parser_register(opp, "-gpgpu_occupancy_sm_number", OPT_INT32, &g_occupancy_sm_number,
+ "The SM number to pass to ptxas when getting register usage for computing GPU occupancy. "
+ "This parameter is required in the config.",
+ "0");
}
void print_ptx_file( const char *p, unsigned source_num, const char *filename )
@@ -120,7 +125,7 @@ char* gpgpu_ptx_sim_convert_ptx_and_sass_to_ptxplus(const std::string ptxfilenam
fflush(stdout);
printf("GPGPU-Sim PTX: calling cuobjdump_to_ptxplus\ncommandline: %s\n", commandline);
result = system(commandline);
- if(result){printf("GPGPU-Sim PTX: ERROR ** could not execute %s\n", commandline); exit(1);}
+ if(result){fprintf(stderr, "GPGPU-Sim PTX: ERROR ** could not execute %s\n", commandline); exit(1);}
// Get ptxplus from file
@@ -142,7 +147,7 @@ char* gpgpu_ptx_sim_convert_ptx_and_sass_to_ptxplus(const std::string ptxfilenam
printf("GPGPU-Sim PTX: removing temporary files using \"%s\"\n", rm_commandline);
int rm_result = system(rm_commandline);
if( rm_result != 0 ) {
- printf("GPGPU-Sim PTX: ERROR ** while removing temporary files %d\n", rm_result);
+ fprintf(stderr, "GPGPU-Sim PTX: ERROR ** while removing temporary files %d\n", rm_result);
exit(1);
}
}
@@ -193,7 +198,7 @@ void fix_duplicate_errors(char fname2[1024]) {
printf("Running: %s\n", commandline);
int result = system(commandline);
if (result != 0) {
- printf("GPGPU-Sim PTX: ERROR ** while changing filename from %s to %s", fname2, tempfile);
+ fprintf(stderr, "GPGPU-Sim PTX: ERROR ** while changing filename from %s to %s", fname2, tempfile);
exit(1);
}
@@ -282,12 +287,12 @@ void fix_duplicate_errors(char fname2[1024]) {
printf("Running: %s\n", commandline);
result = system(commandline);
if (result != 0) {
- printf("GPGPU-Sim PTX: ERROR ** while deleting %s", tempfile);
+ fprintf(stderr, "GPGPU-Sim PTX: ERROR ** while deleting %s", tempfile);
exit(1);
}
}
-void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num, unsigned sm_version )
+void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num )
{
char fname[1024];
snprintf(fname,1024,"_ptx_XXXXXX");
@@ -308,9 +313,9 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
printf("Running: %s\n", commandline2);
int result = system(commandline2);
if( result != 0 ) {
- printf("GPGPU-Sim PTX: ERROR ** while loading PTX (a) %d\n", result);
- printf(" Ensure you have write access to simulation directory\n");
- printf(" and have \'cat\' and \'sed\' in your path.\n");
+ fprintf(stderr, "GPGPU-Sim PTX: ERROR ** while loading PTX (a) %d\n", result);
+ fprintf(stderr, " Ensure you have write access to simulation directory\n");
+ fprintf(stderr, " and have \'cat\' and \'sed\' in your path.\n");
exit(1);
}
@@ -321,15 +326,20 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
extra_flags[0]=0;
#if CUDART_VERSION >= 3000
- if (sm_version == 0) sm_version = 20;
+ if ( g_occupancy_sm_number == 0 ) {
+ fprintf( stderr, "gpgpusim.config must specify the sm version for the GPU that you use to compute occupancy \"-gpgpu_occupancy_sm_number XX\".\n"
+ "The register file size is specifically tied to the sm version used to querry ptxas for register usage.\n"
+ "A register size/SM mismatch may result in occupancy differences." );
+ exit(1);
+ }
extern bool g_cdp_enabled;
if(!g_cdp_enabled)
- snprintf(extra_flags,1024,"--gpu-name=sm_%u",sm_version);
+ snprintf(extra_flags,1024,"--gpu-name=sm_%u", g_occupancy_sm_number);
else
- snprintf(extra_flags,1024,"--compile-only --gpu-name=sm_%u",sm_version);
+ snprintf(extra_flags,1024,"--compile-only --gpu-name=sm_%u",g_occupancy_sm_number);
#endif
- snprintf(commandline,1024,"$CUDA_INSTALL_PATH/bin/ptxas %s -v %s --output-file /dev/null 2> %s",
+ snprintf(commandline,1024,"$PTXAS_CUDA_INSTALL_PATH/bin/ptxas %s -v %s --output-file /dev/null 2> %s",
extra_flags, fname2, tempfile_ptxinfo);
printf("GPGPU-Sim PTX: generating ptxinfo using \"%s\"\n", commandline);
result = system(commandline);
@@ -347,8 +357,8 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
result = system(commandline);
}
if (result != 0) {
- printf("GPGPU-Sim PTX: ERROR ** while loading PTX (b) %d\n", result);
- printf(" Ensure ptxas is in your path.\n");
+ fprintf(stderr, "GPGPU-Sim PTX: ERROR ** while loading PTX (b) %d\n", result);
+ fprintf(stderr, " Ensure ptxas is in your path.\n");
exit(1);
}
}
@@ -362,7 +372,7 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
printf("GPGPU-Sim PTX: removing ptxinfo using \"%s\"\n", commandline);
result = system(commandline);
if( result != 0 ) {
- printf("GPGPU-Sim PTX: ERROR ** while loading PTX (c) %d\n", result);
+ fprintf(stderr, "GPGPU-Sim PTX: ERROR ** while loading PTX (c) %d\n", result);
exit(1);
}
}
diff --git a/src/cuda-sim/ptx_loader.h b/src/cuda-sim/ptx_loader.h
index d3d0c92..cb02eda 100644
--- a/src/cuda-sim/ptx_loader.h
+++ b/src/cuda-sim/ptx_loader.h
@@ -32,7 +32,7 @@
extern bool g_override_embedded_ptx;
class symbol_table *gpgpu_ptx_sim_load_ptx_from_string( const char *p, unsigned source_num );
-void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num, unsigned sm_version=20 );
+void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num );
char* gpgpu_ptx_sim_convert_ptx_and_sass_to_ptxplus(const std::string ptx_str, const std::string sass_str, const std::string elf_str);
bool keep_intermediate_files();
diff --git a/src/cuda-sim/ptx_parser.cc b/src/cuda-sim/ptx_parser.cc
index eb81961..d5324d0 100644
--- a/src/cuda-sim/ptx_parser.cc
+++ b/src/cuda-sim/ptx_parser.cc
@@ -267,7 +267,7 @@ void parse_assert_impl( int test_value, const char *file, unsigned line, const c
parse_error_impl(file,line, msg);
}
-extern char linebuf[1024];
+extern char linebuf[4096];
void set_return()
@@ -436,7 +436,7 @@ void add_identifier( const char *identifier, int array_dim, unsigned array_ident
assert( (num_bits%8) == 0 );
addr = g_current_symbol_table->get_shared_next();
addr_pad = pad_address(addr, num_bits/8, 128);
- printf("from 0x%x to 0x%lx (shared memory space)\n",
+ printf("from 0x%llx to 0x%llx (shared memory space)\n",
addr+addr_pad,
addr+addr_pad + num_bits/8);
fflush(stdout);
@@ -467,7 +467,7 @@ void add_identifier( const char *identifier, int array_dim, unsigned array_ident
assert( (num_bits%8) == 0 );
addr = g_current_symbol_table->get_global_next();
addr_pad = pad_address(addr, num_bits/8, 128);
- printf("from 0x%x to 0x%lx (global memory space) %u\n",
+ printf("from 0x%llx to 0x%llx (global memory space) %u\n",
addr+addr_pad,
addr+addr_pad + num_bits/8,
g_const_alloc++);
@@ -488,7 +488,7 @@ void add_identifier( const char *identifier, int array_dim, unsigned array_ident
assert( (num_bits%8) == 0 );
addr = g_current_symbol_table->get_global_next();
addr_pad = pad_address(addr, num_bits/8, 128);
- printf("from 0x%x to 0x%lx (global memory space)\n",
+ printf("from 0x%llx to 0x%llx (global memory space)\n",
addr+addr_pad,
addr+addr_pad + num_bits/8);
fflush(stdout);
@@ -505,7 +505,7 @@ void add_identifier( const char *identifier, int array_dim, unsigned array_ident
assert( (num_bits%8) == 0 );
addr = g_current_symbol_table->get_local_next();
addr_pad = pad_address(addr, num_bits/8, 128);
- printf("from 0x%x to 0x%lx (local memory space)\n",
+ printf("from 0x%llx to 0x%llx (local memory space)\n",
addr+addr_pad,
addr+addr_pad + num_bits/8);
fflush(stdout);
@@ -518,7 +518,7 @@ void add_identifier( const char *identifier, int array_dim, unsigned array_ident
assert( (num_bits%8) == 0 );
addr = g_current_symbol_table->get_local_next();
addr_pad = pad_address(addr, num_bits/8, 128);
- printf("from 0x%x to 0x%lx\n",
+ printf("from 0x%llx to 0x%llx\n",
addr+addr_pad,
addr+addr_pad + num_bits/8);
fflush(stdout);
diff --git a/src/cuda-sim/ptx_sim.h b/src/cuda-sim/ptx_sim.h
index ea87e59..0a6e8eb 100644
--- a/src/cuda-sim/ptx_sim.h
+++ b/src/cuda-sim/ptx_sim.h
@@ -28,7 +28,7 @@
#define ptx_sim_h_INCLUDED
#include <stdlib.h>
-#include "half.hpp"
+#include "half.h"
#include "../abstract_hardware_model.h"
#include "../tr1_hash_map.h"