Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

Problem with ippiNormDiff_L1_16s in IPP 8.2

Alexander_Karsakov
1,797 Views

Hello,

I have a strange result for ippiNormDiff_L1_16s_C1R function in IPP 8.2. Code for reproducing below:

short a[21*15] = { 10, 8, 7, 2, 3, 3, 6, 2, 2, 4, 7, 10, 8, 8, 6, 7, 5, 10, 7, 7, 3, 2, 3, 2, 6, 2, 6, 2, 9, 9, 9, 2, 4,
                10, 5, 5, 9, 2, 6, 7, 9, 9, 6, 3, 10, 7, 3, 9, 2, 10, 9, 10, 8, 8, 10, 5, 10, 9, 5, 4, 4, 2, 3, 5,
                4, 9, 5, 3, 7, 8, 2, 2, 7, 9, 10, 5, 5, 10, 5, 6, 5, 6, 7, 4, 10, 10, 3, 7, 2, 10, 7, 9, 2, 4, 9, 2,
                6, 6, 6, 6, 8, 3, 7, 10, 5, 5, 2, 4, 4, 7, 8, 10, 2, 8, 4, 2, 10, 3, 6, 4, 10, 9, 6, 10, 8, 5, 7, 8,
                10, 9, 3, 8, 4, 2, 3, 5, 3, 2, 3, 7, 4, 9, 10, 9, 8, 3, 4, 4, 9, 8, 7, 4, 10, 6, 2, 5, 10, 6, 3, 5,
                5, 10, 4, 9, 8, 5, 6, 6, 8, 7, 8, 6, 3, 4, 8, 8, 2, 6, 3, 3, 9, 10, 5, 8, 10, 9, 2, 8, 6, 7, 2, 10,
                7, 2, 8, 10, 5, 6, 4, 10, 9, 3, 6, 9, 2, 9, 10, 9, 8, 10, 5, 4, 10, 5, 10, 4, 4, 7, 10, 6, 8, 4, 7,
                5, 7, 5, 9, 4, 2, 2, 8, 5, 9, 3, 7, 2, 3, 2, 3, 8, 5, 9, 4, 4, 5, 4, 9, 7, 7, 8, 7, 5, 3, 8, 3, 6, 10,
                10, 3, 6, 9, 4, 4, 9, 4, 5, 9, 9, 4, 3, 8, 4, 3, 4, 6, 6, 10, 8, 5, 3, 8, 4, 6, 7, 9, 9, 9, 4, 2, 9,
                8, 5, 2, 10, 3, 4, 10, 5, 6, 3, 6, 10, 3, 5, 5, 5, 8, 6, 7, 8, 5, 3, 2, 2, 10 };

short b[21*15] = { 1358, -1177, 167, -1533, 62, -1416, -1002, 216, -844, 970, 1228, -663, 1503, 403,
                347, 621, -760, -920, 999, 1684, 809, 1507, -1383, -860, 1043, 1539, -1332, -437,
                54, -1033, 475, 183, -1401, 77, -963, 208, 1424, 21, 1295, 285, -69, -132, -204,
                884, 154, -1467, 1004, -1366, 1461, -190, 1564, 493, -238, 495, 853, -1316, 1057,
                -1534, 1107, 72, -284, -643, -1171, 509, 116, 1112, 177, 108, -402, 1422, -219,
                1163, -848, -502, 97, -1296, -498, 18, -185, 1438, -780, -1207, 1451, 1064, 876,
                -814, -483, 716, -1408, 1693, 1030, 228, -610, 486, 1076, 1540, 848, 1384, -831,
                -865, 452, -562, -611, 429, -740, 160, -8, 220, 1421, -1193, 860, -1422, 422,
                -1519, 1641, -1512, -251, 1151, -490, 150, 246, 1119, -822, -1057, 991, 979, 571,
                -692, 1399, -32, 1306, 1542, 1568, -1095, 1346, -736, -895, 1427, 1067, 488,
                -1430, 314, -85, -808, 672, 461, 960, 1117, 993, 729, -348, 1510, 1658, 1151, 570,
                -847, 704, 1219, -1103, -1176, 1590, -991, 893, -432, -194, -719, 811, -286, 1266,
                592, 895, -1321, -1531, 1051, -1352, -1355, -1109, -37, -1300, 875, 912, -1181,
                -339, 1431, 579, -1048, 752, 314, -1416, 1070, -1111, 911, -679, 1648, 340, 751,
                -1070, 758, 261, -1365, 681, 1505, -632, 1702, 705, -1001, 925, -736, 1432, -904,
                301, -1246, -448, 1177, 342, 1500, 1015, 767, 486, -812, -970, 999, -700, 571, 452,
                512, 802, -313, 1625, -184, 830, 1175, 894, 1233, -1317, 958, 98, 974, 1289, 947,
                -1449, -206, -109, 1332, -226, -190, 1247, 725, 227, -167, 1083, -1180, 789, -697,
                -683, -1440, -283, -1, -804, -217, 927, -90, 1321, 139, -166, 1015, -14, 1583,
                -682, 373, 1504, -1248, 1456, 215, 1105, -1338, -322, -389, 682, 694, 642, 1253,
                1306, 605, 468, 1296, 669, -417, -360, -479, 551, -476, -664, -301, -1476, 1603,
                229, -43, -1280, 1668, 1550, 556, 407, 853, 1516, -665, -1324, -366, 510, 1589,
                1248, 330, 1371, 1545, -147 };

IppiSize size = { 21, 15 };
Ipp64f res1;
ippiNormDiff_L1_16s_C1R(a, 21*sizeof(short), b, 21*sizeof(short), size, &res1);

double res2 = 0;
for (int i=0; i<21*15; i++)
    res2 += abs(a - b);

printf("IPP result = %f, my result = %f\n", res1, res2);

The result is:

IPP result = 263390.000000, my result = 263381.000000

Please look at this problem.

Best regards,

Alexander.

0 Kudos
1 Solution
Igor_A_Intel
Employee
1,797 Views

Hi Alexander,

thank you for your report/finding - I've reproduced the issue - it exists only in AVX2 code version - will be fixed in the next IPP version.

regards, Igor

View solution in original post

0 Kudos
5 Replies
Alexander_Karsakov
1,797 Views

My configuration:

  • OS: Windows 7 HB
  • Compiler: VC 17
  • Processor: Intel Core i5 4570
  • Intel® Parallel Studio XE Composer Edition for C++ Windows, package ID: w_ccompxe_2015.0.108.
0 Kudos
Igor_A_Intel
Employee
1,798 Views

Hi Alexander,

thank you for your report/finding - I've reproduced the issue - it exists only in AVX2 code version - will be fixed in the next IPP version.

regards, Igor

0 Kudos
Alexander_Karsakov
1,797 Views

Hi Igor,

In IPPICV 8.2.1 we still have problems with ippiNormDiff_L1_16s_C1R. Now it failed another case (code for reproducing in attachment). Could you please take a look?

Best regards,

Alexander.

 

0 Kudos
Igor_A_Intel
Employee
1,797 Views

Hi Alexander,

got your message - will take a look and then answer - guess in 1 or 2 days.

regards, Igor

0 Kudos
Gennady_F_Intel
Moderator
1,797 Views

hello!

the fix of the issue has been incorporated into IPP v.9.0 beta released recently.  You may evaluate the beta version and let us know how it will work. Here is the output which received with this version. 

ippIP AVX2 (l9 threaded) 9.0.0 Beta (r45861)
SSE    :Y
SSE2   :Y
SSE3   :Y
SSSE3  :Y
SSE41  :Y
SSE42  :Y
AVX    :Y
AVX2   :Y
----------
OS Enabled AVX :Y
AES            :Y
CLMUL          :Y
RDRAND         :Y
F16C           :Y
IPP = 29802861.000000, reference result = 29802861.000000
Press any key to continue . . .

0 Kudos
Reply