Home | History | Annotate | Download | only in test
      1 #include "test_precomp.hpp"
      2 #include "opencv2/ts/ocl_test.hpp"
      3 
      4 #ifdef HAVE_IPP_A
      5 #include "opencv2/core/ippasync.hpp"
      6 
      7 using namespace cv;
      8 using namespace std;
      9 using namespace cvtest;
     10 
     11 namespace cvtest {
     12 namespace ocl {
     13 
     14 PARAM_TEST_CASE(IPPAsync, MatDepth, Channels, hppAccelType)
     15 {
     16     int type;
     17     int cn;
     18     int depth;
     19     hppAccelType accelType;
     20 
     21     Mat matrix, result;
     22     hppiMatrix * hppMat;
     23     hppAccel accel;
     24     hppiVirtualMatrix * virtMatrix;
     25     hppStatus sts;
     26 
     27     virtual void SetUp()
     28     {
     29         type = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
     30         depth = GET_PARAM(0);
     31         cn = GET_PARAM(1);
     32         accelType = GET_PARAM(2);
     33     }
     34 
     35     virtual void generateTestData()
     36     {
     37         Size matrix_Size = randomSize(2, 100);
     38         const double upValue = 100;
     39 
     40         matrix = randomMat(matrix_Size, type, -upValue, upValue);
     41     }
     42 
     43     void Near(double threshold = 0.0)
     44     {
     45         EXPECT_MAT_NEAR(matrix, result, threshold);
     46     }
     47 };
     48 
     49 TEST_P(IPPAsync, accuracy)
     50 {
     51     sts = hppCreateInstance(accelType, 0, &accel);
     52     if (sts!=HPP_STATUS_NO_ERROR) printf("hppStatus = %d\n",sts);
     53     CV_Assert(sts==HPP_STATUS_NO_ERROR);
     54 
     55     virtMatrix = hppiCreateVirtualMatrices(accel, 2);
     56 
     57     for (int j = 0; j < test_loop_times; j++)
     58     {
     59         generateTestData();
     60         hppMat = hpp::getHpp(matrix,accel);
     61 
     62         hppScalar a = 3;
     63 
     64         sts = hppiAddC(accel, hppMat, a, 0, virtMatrix[0]);
     65         CV_Assert(sts==HPP_STATUS_NO_ERROR);
     66         sts = hppiSubC(accel, virtMatrix[0], a, 0, virtMatrix[1]);
     67         CV_Assert(sts==HPP_STATUS_NO_ERROR);
     68 
     69         sts = hppWait(accel, HPP_TIME_OUT_INFINITE);
     70         CV_Assert(sts==HPP_STATUS_NO_ERROR);
     71 
     72         result = hpp::getMat(virtMatrix[1], accel, cn);
     73 
     74         Near(5.0e-6);
     75 
     76         sts =  hppiFreeMatrix(hppMat);
     77         CV_Assert(sts==HPP_STATUS_NO_ERROR);
     78     }
     79 
     80     sts = hppiDeleteVirtualMatrices(accel, virtMatrix);
     81     CV_Assert(sts==HPP_STATUS_NO_ERROR);
     82     sts = hppDeleteInstance(accel);
     83     CV_Assert(sts==HPP_STATUS_NO_ERROR);
     84 }
     85 
     86 PARAM_TEST_CASE(IPPAsyncShared, Channels, hppAccelType)
     87 {
     88     int cn;
     89     int type;
     90     hppAccelType accelType;
     91 
     92     Mat matrix, result;
     93     hppiMatrix* hppMat;
     94     hppAccel accel;
     95     hppiVirtualMatrix * virtMatrix;
     96     hppStatus sts;
     97 
     98     virtual void SetUp()
     99     {
    100         cn = GET_PARAM(0);
    101         accelType = GET_PARAM(1);
    102         type=CV_MAKE_TYPE(CV_8U, GET_PARAM(0));
    103     }
    104 
    105     virtual void generateTestData()
    106     {
    107         Size matrix_Size = randomSize(2, 100);
    108         hpp32u pitch, size;
    109         const int upValue = 100;
    110 
    111         sts = hppQueryMatrixAllocParams(accel, (hpp32u)(matrix_Size.width*cn), (hpp32u)matrix_Size.height, HPP_DATA_TYPE_8U, &pitch, &size);
    112 
    113         if (pitch!=0 && size!=0)
    114         {
    115             uchar *pData = (uchar*)_aligned_malloc(size, 4096);
    116 
    117             for (int j=0; j<matrix_Size.height; j++)
    118                 for(int i=0; i<matrix_Size.width*cn; i++)
    119                     pData[i+j*pitch] = rand()%upValue;
    120 
    121             matrix = Mat(matrix_Size.height, matrix_Size.width, type, pData, pitch);
    122         }
    123 
    124         matrix = randomMat(matrix_Size, type, 0, upValue);
    125     }
    126 
    127     void Near(double threshold = 0.0)
    128     {
    129         EXPECT_MAT_NEAR(matrix, result, threshold);
    130     }
    131 };
    132 
    133 TEST_P(IPPAsyncShared, accuracy)
    134 {
    135     sts = hppCreateInstance(accelType, 0, &accel);
    136     if (sts!=HPP_STATUS_NO_ERROR) printf("hppStatus = %d\n",sts);
    137     CV_Assert(sts==HPP_STATUS_NO_ERROR);
    138 
    139     virtMatrix = hppiCreateVirtualMatrices(accel, 2);
    140 
    141     for (int j = 0; j < test_loop_times; j++)
    142     {
    143         generateTestData();
    144         hppMat = hpp::getHpp(matrix,accel);
    145 
    146         hppScalar a = 3;
    147 
    148         sts = hppiAddC(accel, hppMat, a, 0, virtMatrix[0]);
    149         CV_Assert(sts==HPP_STATUS_NO_ERROR);
    150         sts = hppiSubC(accel, virtMatrix[0], a, 0, virtMatrix[1]);
    151         CV_Assert(sts==HPP_STATUS_NO_ERROR);
    152 
    153         sts = hppWait(accel, HPP_TIME_OUT_INFINITE);
    154         CV_Assert(sts==HPP_STATUS_NO_ERROR);
    155 
    156         result = hpp::getMat(virtMatrix[1], accel, cn);
    157 
    158         Near(0);
    159 
    160         sts =  hppiFreeMatrix(hppMat);
    161         CV_Assert(sts==HPP_STATUS_NO_ERROR);
    162     }
    163 
    164     sts = hppiDeleteVirtualMatrices(accel, virtMatrix);
    165     CV_Assert(sts==HPP_STATUS_NO_ERROR);
    166     sts = hppDeleteInstance(accel);
    167     CV_Assert(sts==HPP_STATUS_NO_ERROR);
    168 }
    169 
    170 INSTANTIATE_TEST_CASE_P(IppATest, IPPAsyncShared, Combine(Values(1, 2, 3, 4),
    171                                                     Values( HPP_ACCEL_TYPE_CPU, HPP_ACCEL_TYPE_GPU)));
    172 
    173 INSTANTIATE_TEST_CASE_P(IppATest, IPPAsync, Combine(Values(CV_8U, CV_16U, CV_16S, CV_32F),
    174                                                    Values(1, 2, 3, 4),
    175                                                    Values( HPP_ACCEL_TYPE_CPU, HPP_ACCEL_TYPE_GPU)));
    176 
    177 }
    178 }
    179 #endif