Set minimum matrix size for AmdBlas::gemm to 20 since it works incorrect for small...
authorAlexander Karsakov <alexander.karsakov@itseez.com>
Tue, 12 Aug 2014 14:02:29 +0000 (18:02 +0400)
committerAlexander Karsakov <alexander.karsakov@itseez.com>
Tue, 12 Aug 2014 14:02:29 +0000 (18:02 +0400)
modules/core/src/matmul.cpp
modules/core/test/ocl/test_gemm.cpp

index 99711e2..5f5e438 100644 (file)
@@ -781,8 +781,9 @@ void cv::gemm( InputArray matA, InputArray matB, double alpha,
            InputArray matC, double beta, OutputArray _matD, int flags )
 {
 #ifdef HAVE_CLAMDBLAS
-    CV_OCL_RUN(ocl::haveAmdBlas() && matA.dims() <= 2 && matB.dims() <= 2 && matC.dims() <= 2 && _matD.isUMat(),
-            ocl_gemm(matA, matB, alpha, matC, beta, _matD, flags))
+    CV_OCL_RUN(ocl::haveAmdBlas() && matA.dims() <= 2 && matB.dims() <= 2 && matC.dims() <= 2 && _matD.isUMat() &&
+        matA.cols() > 20 && matA.rows() > 20 && matB.cols() > 20, // since it works incorrect for small sizes
+        ocl_gemm(matA, matB, alpha, matC, beta, _matD, flags))
 #endif
 
     const int block_lin_size = 128;
index e98135a..493b6cd 100644 (file)
@@ -90,14 +90,15 @@ PARAM_TEST_CASE(Gemm,
 
     void generateTestData()
     {
-        Size ARoiSize = randomSize(1, MAX_VALUE);
+        // set minimum size to 20, since testing less sizes doesn't make sense
+        Size ARoiSize = randomSize(20, MAX_VALUE);
         Border ABorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
         randomSubMat(A, A_roi, ARoiSize, ABorder, type, -11, 11);
 
         if (atrans)
             ARoiSize = Size(ARoiSize.height, ARoiSize.width);
 
-        Size BRoiSize = randomSize(1, MAX_VALUE);
+        Size BRoiSize = randomSize(20, MAX_VALUE);
         if (btrans)
             BRoiSize.width = ARoiSize.width;
         else