summaryrefslogtreecommitdiff
path: root/src/cuda-sim/instructions.cc
diff options
context:
space:
mode:
authoraamir <[email protected]>2018-08-13 12:53:13 -0700
committeraamir <[email protected]>2018-08-13 12:53:13 -0700
commit35695a3fb6dee0ad94baaa97dd8d7a9ad9d8156d (patch)
tree4777737c288623798854a4326aad260248a3844f /src/cuda-sim/instructions.cc
parentc3130d6216b8b143baca571b2d1905054f30385b (diff)
generalized v4 completed;Note I have only added row major support for matrix b
Diffstat (limited to 'src/cuda-sim/instructions.cc')
-rw-r--r--src/cuda-sim/instructions.cc71
1 files changed, 47 insertions, 24 deletions
diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc
index 1e84425..b26adfd 100644
--- a/src/cuda-sim/instructions.cc
+++ b/src/cuda-sim/instructions.cc
@@ -133,7 +133,7 @@ unsigned thread_group_offset(int thread,unsigned wmma_type,unsigned wmma_layout
if(wmma_layout==ROW)
offset=load_c_float_row[thread_group]+16*in_tg_index;
else
- offset=load_c_float_col[thread_group]+16*in_tg_index;
+ offset=load_c_float_col[thread_group]+in_tg_index;
break;
default:
@@ -1810,7 +1810,7 @@ void vp_mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
printf("MATRIX_B\n");
for (i=0;i<16;i++){
for(j=0;j<16;j++){
- printf("%x ",matrix_b[i][j].s32);
+ printf("%d ",matrix_b[i][j].s32);
}
printf("\n");
}
@@ -1922,7 +1922,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
for(k=0;k<2*nelem;k++){
temp=nw_v[k].f16;
if(g_debug_instruction)
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
if(g_debug_instruction)
printf("\n");
@@ -1930,7 +1930,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
else{
if(g_debug_instruction){
for(k=0;k<8;k++){
- printf("%f ",v[k].f32);
+ printf("%.2f ",v[k].f32);
}
printf("\n");
}
@@ -1977,7 +1977,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
for (i=0;i<16;i++){
for(j=0;j<16;j++){
temp=matrix_a[i][j].f16;
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
printf("\n");
}
@@ -1985,7 +1985,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
for (i=0;i<16;i++){
for(j=0;j<16;j++){
temp=matrix_b[i][j].f16;
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
printf("\n");
}
@@ -1994,10 +1994,10 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
for(j=0;j<16;j++){
if(type2==F16_TYPE){
temp=matrix_c[i][j].f16;
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
else
- printf("%f ",matrix_c[i][j].f32);
+ printf("%.2f ",matrix_c[i][j].f32);
}
printf("\n");
}
@@ -2038,7 +2038,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
for(j=0;j<16;j++){
if(type==F16_TYPE){
temp=matrix_d[i][j].f16;
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
else
printf("%.2f ",matrix_d[i][j].f32);
@@ -2064,7 +2064,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
{
printf("thread%d:",thrd);
for(k=0;k<8;k++){
- printf("%f ",matrix_d[row_t[k]][col_t[k]].f32);
+ printf("%.2f ",matrix_d[row_t[k]][col_t[k]].f32);
}
printf("\n");
}
@@ -2074,7 +2074,7 @@ void mma_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
printf("thread%d:",thrd);
for(k=0;k<8;k++){
temp=matrix_d[row_t[k]][col_t[k]].f16;
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
printf("\n");
@@ -3162,10 +3162,14 @@ void vp_st_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
addr_t new_addr = addr+thread_group_offset(thrd,VP_MMA,wmma_layout,type,stride)*size/8;
if(g_debug_instruction){
- printf("vp:store: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);
+ 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++){
- mem->write(new_addr+4*k,size/8,&v[k].s64,thread,pI);
+ if(wmma_layout==ROW)
+ mem->write(new_addr+4*k,size/8,&v[k].s64,thread,pI);
+ else if(wmma_layout==COL)
+ mem->write(new_addr+k*4*stride,size/8,&v[k].s64,thread,pI);
}
delete [] v;
@@ -3236,7 +3240,7 @@ void mma_st_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
printf("thread=%d:",thrd);
for(l=0;l<8;l++){
temp=v[l].f32;
- printf("%f",temp);
+ printf("%.2f",temp);
}
printf("\n");
}
@@ -3292,6 +3296,7 @@ void vp_ld_impl(const ptx_instruction *pI, core_t *core, warp_inst_t inst)
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;
@@ -3311,22 +3316,40 @@ void vp_ld_impl(const ptx_instruction *pI, core_t *core, warp_inst_t inst)
if(wmma_type==LOAD_A||wmma_type==LOAD_C){
for(i=0;i<8;i++){
- mem->read(new_addr+4*i,size/8,&data[i].s64);
+ if(wmma_layout==ROW)
+ mem->read(new_addr+4*i,size/8,&data[i].s64);
+ else if(wmma_layout==COL)
+ mem->read(new_addr+4*stride*i,size/8,&data[i].s64);
}
}
else if(wmma_type==LOAD_B4){
- mem->read(new_addr,size/8,&data[0].s64);
+ if(wmma_layout==ROW){
+ mem->read(new_addr,size/8,&data[0].s64);
+ }
+ else if(wmma_layout==COL){
+
+ }
}
else if(wmma_type==LOAD_B8){
- mem->read(new_addr,size/8,&data[0].s64);
- mem->read(new_addr+4,size/8,&data[1].s64);
+ if(wmma_layout==ROW){
+ mem->read(new_addr,size/8,&data[0].s64);
+ mem->read(new_addr+4,size/8,&data[1].s64);
+ }
+ else if(wmma_layout==COL){
+
+ }
}
else if(wmma_type==LOAD_B16){
printf("LOADB16_MODE");
- 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);
+ 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);
+ }
+ else if(wmma_layout==COL){
+
+ }
}
else{
printf("wrong vp_load type\n");;
@@ -3490,14 +3513,14 @@ void mma_ld_impl( const ptx_instruction *pI, core_t *core, warp_inst_t inst )
float temp;
for(i=0;i<16;i++){
temp=data[i].f16;
- printf("%f ",temp);
+ printf("%.2f ",temp);
}
printf("\n");
}
else{
printf("\nmma_ld:thread%d= ",thrd);
for(i=0;i<8;i++){
- printf("%f ",data[i].f32);
+ printf("%.2f ",data[i].f32);
}
printf("\n");
printf("\nmma_ld:thread%d= ",thrd);