Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
6707 Discussions

ippiFilterScharrVertBorder_32f_C1R segmentation fault

Adam_Bowen
Beginner
359 Views
Sample code:
[cpp]
#include #include #include #include "ipp.h" int main(int, char *[]) { ippStaticInit(); const IppiBorderType bt = ippBorderConst; IppiSize roi; roi.width = 400; roi.height = 500; std::cout << "in is " << roi.width << "x" << roi.height << std::endl; int in_stride = 0; Ipp32f *in = ippiMalloc_32f_C1(roi.width,roi.height,&in_stride); assert( in != NULL ); IppStatus status = ippiSet_32f_C1R(0.0f,in,in_stride,roi); assert( status == ippStsNoErr ); std::cout << "in_stride is " << in_stride << " bytes" << std::endl; int out_stride = 0; Ipp32f *out = ippiMalloc_32f_C1(roi.width,roi.height,&out_stride); assert( out != NULL ); std::cout << "out_stride is " << out_stride << " bytes" << std::endl; int v_buffer_size = 0; status = ippiFilterScharrVertGetBufferSize_32f_C1R( roi, &v_buffer_size ); assert( status == ippStsNoErr ); Ipp8u *buffer = ippsMalloc_8u(v_buffer_size); assert(buffer != NULL); std::cout << "allocated " << v_buffer_size << " bytes for buffer" << std::endl; status = ippiFilterScharrVertBorder_32f_C1R( in, in_stride, out, out_stride, roi, bt, 0.0f, &buffer[0] ); assert( status == ippStsNoErr ); ippiFree(in); ippiFree(out); ippsFree(buffer); return 0; } [/cpp]

The code segmentation faults on the ippiFilterScharrVertBorder_32f_C1R call. Compiled with:

g++ -g -I/opt/intel/ipp/include -o debug-scharr.cpp.o -c debug-scharr.cpp
g++ -g debug-scharr.cpp.o -o debug-scharr \\\\
/opt/intel/composer_xe_2011_sp1.10.319/ipp/lib/intel64/libippcv_l.a \\\\
/opt/intel/composer_xe_2011_sp1.10.319/ipp/lib/intel64/libippi_l.a \\\\
/opt/intel/composer_xe_2011_sp1.10.319/ipp/lib/intel64/libipps_l.a \\\\
/opt/intel/composer_xe_2011_sp1.10.319/ipp/lib/intel64/libippcore_l.a

uname -a: Linux babbage.local 3.4.6-2.fc17.x86_64 #1 SMP Thu Jul 19 22:54:16 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
OS: Fedora F17 64-bit
CPU: Intel Core i7-2600 @ 3.4GHz
IPP: 7.0.7.319 intel64

Two important points:
  1. Removing the ippStaticInit call stops it from crashing, this presumably uses the generic CPU code path instead of the optimised one.
  2. The horizontal filter routines work just fine (ippiFilterScharrHorizGetBufferSize_32f_C1R and ippiFilterScharrHorizBorder_32f_C1R).
Pretty sure this is a bug in the IPP.
0 Kudos
4 Replies
Ying_H_Intel
Employee
359 Views
Hi Adam,

Thank youa lot for the report and detialed test case. We will investigate it and let you know if any updates.

Best Regards,
Ying
0 Kudos
Adam_Bowen
Beginner
359 Views

I forgot to mention I'm using the stock GCC for F17, gcc 4.7.0 20120507 (Red Hat 4.7.0-5).

I've also noticed that the Horiz routine also segfaults in our main application, but not in the test case above - I haven't investigated further though.

0 Kudos
Ying_H_Intel
Employee
359 Views
Hi Adam,

Thanks for the update. I can reproduce the problem in VerticalBorder. The problem have been escalated to our developer team. We will keep you update.

Best Regards,
Ying
0 Kudos
Ying_H_Intel
Employee
359 Views
Hi Adam, I get notification from our engineer. When they try the code with IPP 7.1 gold, the problem was gone. So they marked the problem is fixed in IPP 7.1. Would you like to try it and let me know if any problem. You can download IPP 7.1 from http://registrationcenter.intel.com/irc_nas/2754/l_ipp_7.1.0.079.tgz Best Regards, Ying
0 Kudos
Reply