From cc14e087c164a25cd9e2374777fdc4e57d9cec39 Mon Sep 17 00:00:00 2001 From: aamir Date: Fri, 14 Sep 2018 01:42:35 -0700 Subject: corrected the bug in vpcore functional model --- cuda-kernels/v16p_genericMatrixMultiply.cu | 24 ++++++++++++++---------- cuda-kernels/v16p_kernel.cu | 9 +++++---- cuda-kernels/v4p_genericMatrixMultiply.cu | 23 +++++++++++++---------- cuda-kernels/v4p_kernel.cu | 9 +++++---- cuda-kernels/v8p_genericMatrixMultiply.cu | 21 +++++++++++---------- cuda-kernels/v8p_kernel.cu | 9 +++++---- 6 files changed, 53 insertions(+), 42 deletions(-) (limited to 'cuda-kernels') diff --git a/cuda-kernels/v16p_genericMatrixMultiply.cu b/cuda-kernels/v16p_genericMatrixMultiply.cu index c36d257..284bd7e 100644 --- a/cuda-kernels/v16p_genericMatrixMultiply.cu +++ b/cuda-kernels/v16p_genericMatrixMultiply.cu @@ -1,5 +1,6 @@ #include #include +#include // Define some error checking macros. #define cudaErrCheck(stat) { cudaErrCheck_((stat), __FILE__, __LINE__); } @@ -20,9 +21,9 @@ void curandErrCheck_(curandStatus_t stat, const char *file, int line) { using namespace nvcuda; // Must be multiples of 16 for wmma code to work -#define MATRIX_M (32) -#define MATRIX_N (32) -#define MATRIX_K (32) +#define MATRIX_M (SIZE) +#define MATRIX_N (SIZE) +#define MATRIX_K (SIZE) // The only dimensions currently supported by WMMA @@ -83,7 +84,7 @@ __global__ void vp_example(int *a, int *b, int *c, int M, int N, int K ) { asm("CPTX_BEGIN"); asm("vp.load.b16.sync.row.m16n16k16.s32 {%0,%1,%2,%3},[%4],%5;" : "=r"(b_frag[0]),"=r"(b_frag[1]),"=r"(b_frag[2]),"=r"(b_frag[3]): - "l"(b+bRow*ldb/2+bCol),"r"(ldb/2) + "l"(b+bRow*ldb/2+bCol/2),"r"(ldb)//NOTE pointer arithematic is happenning over here so be extracareful ); asm("CPTX_END"); asm("*/"); @@ -118,7 +119,7 @@ __global__ void vp_example(int *a, int *b, int *c, int M, int N, int K ) { asm("vp.load.c.sync.row.m16n16k16.s32 {%0,%1,%2,%3,%4,%5,%6,%7},[%8],%9;" : "=r"(c_frag[0]), "=r"(c_frag[1]),"=r"(c_frag[2]),"=r"(c_frag[3]), "=r"(c_frag[4]),"=r"(c_frag[5]),"=r"(c_frag[6]),"=r"(c_frag[7]): - "l"(c+cRow*ldc),"r"(ldc) + "l"(c+cRow*ldc+cCol),"r"(ldc) ); asm("CPTX_END"); asm("*/"); @@ -223,7 +224,7 @@ int main(int argc, char* argv[]) { cudaEvent_t startWMMA; cudaEvent_t stopWMMA; - + srand(time(NULL)); cudaErrCheck(cudaEventCreate(&startWMMA)); cudaErrCheck(cudaEventCreate(&stopWMMA)); @@ -249,7 +250,8 @@ int main(int argc, char* argv[]) { printf("a_int32\n"); for(int m=0;m0); printf("D_CALCULATED\n"); diff --git a/cuda-kernels/v16p_kernel.cu b/cuda-kernels/v16p_kernel.cu index 31a1460..864597d 100644 --- a/cuda-kernels/v16p_kernel.cu +++ b/cuda-kernels/v16p_kernel.cu @@ -1,5 +1,6 @@ #include #include +#include // Define some error checking macros. #define cudaErrCheck(stat) { cudaErrCheck_((stat), __FILE__, __LINE__); } @@ -205,7 +206,7 @@ int main(int argc, char* argv[]) { cudaEvent_t startWMMA; cudaEvent_t stopWMMA; - + srand(time(NULL)); cudaErrCheck(cudaEventCreate(&startWMMA)); cudaErrCheck(cudaEventCreate(&stopWMMA)); @@ -231,7 +232,7 @@ int main(int argc, char* argv[]) { printf("a_int32\n"); for(int m=0;m #include +#include // Define some error checking macros. #define cudaErrCheck(stat) { cudaErrCheck_((stat), __FILE__, __LINE__); } @@ -20,9 +21,9 @@ void curandErrCheck_(curandStatus_t stat, const char *file, int line) { using namespace nvcuda; // Must be multiples of 16 for wmma code to work -#define MATRIX_M (32) -#define MATRIX_N (32) -#define MATRIX_K (32) +#define MATRIX_M (SIZE) +#define MATRIX_N (SIZE) +#define MATRIX_K (SIZE) // The only dimensions currently supported by WMMA @@ -83,7 +84,7 @@ __global__ void vp_example(int *a, int *b, int *c, int M, int N, int K ) { asm("CPTX_BEGIN"); asm("vp.load.b4.sync.row.m16n16k16.s32 {%0},[%1],%2;" : "=r"(b_frag[0]): - "l"(b+bRow*ldb/8+bCol),"r"(ldb/8) + "l"(b+bRow*ldb/8+bCol/8),"r"(ldb) ); asm("CPTX_END"); asm("*/"); @@ -118,7 +119,7 @@ __global__ void vp_example(int *a, int *b, int *c, int M, int N, int K ) { asm("vp.load.c.sync.row.m16n16k16.s32 {%0,%1,%2,%3,%4,%5,%6,%7},[%8],%9;" : "=r"(c_frag[0]), "=r"(c_frag[1]),"=r"(c_frag[2]),"=r"(c_frag[3]), "=r"(c_frag[4]),"=r"(c_frag[5]),"=r"(c_frag[6]),"=r"(c_frag[7]): - "l"(c+cRow*ldc),"r"(ldc) + "l"(c+cRow*ldc+cCol),"r"(ldc) ); asm("CPTX_END"); asm("*/"); @@ -223,7 +224,8 @@ int main(int argc, char* argv[]) { cudaEvent_t startWMMA; cudaEvent_t stopWMMA; - + + srand (time(NULL)); cudaErrCheck(cudaEventCreate(&startWMMA)); cudaErrCheck(cudaEventCreate(&stopWMMA)); @@ -249,7 +251,8 @@ int main(int argc, char* argv[]) { printf("a_int32\n"); for(int m=0;m0); printf("D_CALCULATED\n"); diff --git a/cuda-kernels/v4p_kernel.cu b/cuda-kernels/v4p_kernel.cu index f1a9dbe..053c07b 100644 --- a/cuda-kernels/v4p_kernel.cu +++ b/cuda-kernels/v4p_kernel.cu @@ -1,4 +1,5 @@ #include +#include #include // Define some error checking macros. @@ -205,7 +206,7 @@ int main(int argc, char* argv[]) { cudaEvent_t startWMMA; cudaEvent_t stopWMMA; - + srand (time(NULL)); cudaErrCheck(cudaEventCreate(&startWMMA)); cudaErrCheck(cudaEventCreate(&stopWMMA)); @@ -231,7 +232,7 @@ int main(int argc, char* argv[]) { printf("a_int32\n"); for(int m=0;m #include +#include // Define some error checking macros. #define cudaErrCheck(stat) { cudaErrCheck_((stat), __FILE__, __LINE__); } @@ -20,9 +21,9 @@ void curandErrCheck_(curandStatus_t stat, const char *file, int line) { using namespace nvcuda; // Must be multiples of 16 for wmma code to work -#define MATRIX_M (32) -#define MATRIX_N (32) -#define MATRIX_K (32) +#define MATRIX_M (SIZE) +#define MATRIX_N (SIZE) +#define MATRIX_K (SIZE) // The only dimensions currently supported by WMMA @@ -83,7 +84,7 @@ __global__ void vp_example(int *a, int *b, int *c, int M, int N, int K ) { asm("CPTX_BEGIN"); asm("vp.load.b8.sync.row.m16n16k16.s32 {%0,%1},[%2],%3;" : "=r"(b_frag[0]),"=r"(b_frag[1]): - "l"(b+bRow*ldb/4+bCol),"r"(ldb/4) + "l"(b+bRow*ldb/4+bCol/4),"r"(ldb) ); asm("CPTX_END"); asm("*/"); @@ -118,7 +119,7 @@ __global__ void vp_example(int *a, int *b, int *c, int M, int N, int K ) { asm("vp.load.c.sync.row.m16n16k16.s32 {%0,%1,%2,%3,%4,%5,%6,%7},[%8],%9;" : "=r"(c_frag[0]), "=r"(c_frag[1]),"=r"(c_frag[2]),"=r"(c_frag[3]), "=r"(c_frag[4]),"=r"(c_frag[5]),"=r"(c_frag[6]),"=r"(c_frag[7]): - "l"(c+cRow*ldc),"r"(ldc) + "l"(c+cRow*ldc+cCol),"r"(ldc) ); asm("CPTX_END"); asm("*/"); @@ -223,7 +224,7 @@ int main(int argc, char* argv[]) { cudaEvent_t startWMMA; cudaEvent_t stopWMMA; - + srand(time(NULL)); cudaErrCheck(cudaEventCreate(&startWMMA)); cudaErrCheck(cudaEventCreate(&stopWMMA)); @@ -249,7 +250,7 @@ int main(int argc, char* argv[]) { printf("a_int32\n"); for(int m=0;m0); printf("D_CALCULATED\n"); diff --git a/cuda-kernels/v8p_kernel.cu b/cuda-kernels/v8p_kernel.cu index f824eac..9bfcea7 100644 --- a/cuda-kernels/v8p_kernel.cu +++ b/cuda-kernels/v8p_kernel.cu @@ -1,5 +1,6 @@ #include #include +#include // Define some error checking macros. #define cudaErrCheck(stat) { cudaErrCheck_((stat), __FILE__, __LINE__); } @@ -204,7 +205,7 @@ int main(int argc, char* argv[]) { cudaEvent_t startWMMA; cudaEvent_t stopWMMA; - + srand(time(NULL)); cudaErrCheck(cudaEventCreate(&startWMMA)); cudaErrCheck(cudaEventCreate(&stopWMMA)); @@ -231,7 +232,7 @@ int main(int argc, char* argv[]) { printf("a_int32\n"); for(int m=0;m