ippiFilterScharrVertBorder_32f_C1R segmentation fault

ippiFilterScharrVertBorder_32f_C1R segmentation fault

Sample code:




#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;

}

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.

5 posts / 0 nouveau(x)
Dernière contribution
Reportez-vous à notre Notice d'optimisation pour plus d'informations sur les choix et l'optimisation des performances dans les produits logiciels Intel.

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

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.

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

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

Laisser un commentaire

Veuillez ouvrir une session pour ajouter un commentaire. Pas encore membre ? Rejoignez-nous dès aujourd’hui