Fix the integer overflow issue for large matrix size
authorWang, Long <long1.wang@intel.com>
Wed, 20 Nov 2019 03:50:37 +0000 (11:50 +0800)
committerWang, Long <long1.wang@intel.com>
Wed, 20 Nov 2019 06:11:17 +0000 (14:11 +0800)
For large matrix, e.g. M=N=K, and M>1290, int mnk=M*N*K will overflow.
This will lead to wrong branching to single-threading. The performance
is downgraded significantly.

Signed-off-by: Wang, Long <long1.wang@intel.com>
kernel/x86_64/sgemm_kernel_16x4_skylakex.c
kernel/x86_64/sgemm_kernel_16x4_skylakex_2.c

index 3246e68..31d82e3 100644 (file)
@@ -1215,7 +1215,7 @@ CNAME(BLASLONG m, BLASLONG n, BLASLONG k, float alpha, float * __restrict A, flo
 
 int sgemm_kernel_direct_performant(BLASLONG M, BLASLONG N, BLASLONG K)
 {
-       int mnk = M * N * K;
+       unsigned long mnk = M * N * K;
        /* large matrixes -> not performant */
        if (mnk >= 28 * 512 * 512)
                return 0;
index 5d49123..95963c0 100644 (file)
@@ -452,7 +452,7 @@ CNAME(BLASLONG m, BLASLONG n, BLASLONG k, float alpha, float * __restrict__ A, f
 
 int sgemm_kernel_direct_performant(BLASLONG M, BLASLONG N, BLASLONG K)
 {
-       int mnk = M * N * K;
+       unsigned long mnk = M * N * K;
        /* large matrixes -> not performant */
        if (mnk >= 28 * 512 * 512)
                return 0;