From: Wang, Long Date: Wed, 20 Nov 2019 03:50:37 +0000 (+0800) Subject: Fix the integer overflow issue for large matrix size X-Git-Tag: upstream/0.3.21~30^2~49^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0caf1434c928d39373499ffc02abe645945485d8;p=platform%2Fupstream%2Fopenblas.git Fix the integer overflow issue for large matrix size 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 --- diff --git a/kernel/x86_64/sgemm_kernel_16x4_skylakex.c b/kernel/x86_64/sgemm_kernel_16x4_skylakex.c index 3246e68..31d82e3 100644 --- a/kernel/x86_64/sgemm_kernel_16x4_skylakex.c +++ b/kernel/x86_64/sgemm_kernel_16x4_skylakex.c @@ -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; diff --git a/kernel/x86_64/sgemm_kernel_16x4_skylakex_2.c b/kernel/x86_64/sgemm_kernel_16x4_skylakex_2.c index 5d49123..95963c0 100644 --- a/kernel/x86_64/sgemm_kernel_16x4_skylakex_2.c +++ b/kernel/x86_64/sgemm_kernel_16x4_skylakex_2.c @@ -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;