[Insight-developers] vnl_math::pi coming up undefined with vector optimization turned on?

kent williams norman-k-williams at uiowa.edu
Fri Oct 23 10:10:04 EDT 2009


Yes, I did a scratch rebuild, and I verified by going back to O2 that this
was the issue.

What it looks like is that vcl_math.h isn't declaring all those static
member variables as it should -- very much a VXL library issue, at least on
OSX.

It's not a huge deal to me, except we have some very CPU-intensive code that
would benefit from vectorizing in the registration framework.  At least
that's what Shark is telling me.


On 10/22/09 8:31 PM, "Luis Ibanez" <luis.ibanez at kitware.com> wrote:

> Hi Kent,
> 
> <me speculating>
> 
> One of the things that -O3 does is to force full in-lining of templated
> method.
> 
> I'm wondering if the effect is that something that has been typically
> delegated
> to a cxx initialization is now being done in a header.
> 
> That said...
> the default of "Release" build in Linux is to use -O3....
> so...the problem that you are exposing seems to
> be very specific to OS X.
> 
> </me speculating>
> 
> 
> Question:
> 
> When you changed the flags...
> Did you rebuild the toolkit from scratch ?
> 
> 
>      Luis
> 
> 
> ------------------------
> On Thu, Oct 22, 2009 at 4:36 PM, kent williams
> <norman-k-williams at uiowa.edu> wrote:
>> I¹m trying to build ITK from the CVS source as of today.  I¹m not modifying
>> anything at all.  The only thing I did was use our CFLAGS and CXXFLAGS when
>> I run CMake.  The undefined externals are coming during building ITK itself,
>> not in my application.
>> 
>> The problem didn¹t  show up until I added ­O3 to the command line.  Why that
>> would interact with the static const members of  vnl_math I have no idea.
>> 
>> 
>> On 10/22/09 3:21 PM, "Bradley Lowekamp" <blowekamp at mail.nih.gov> wrote:
>> 
>> Hello kent,
>> 
>> I was just looking at this stuff. It turns out the following is not standard
>> c++:
>> 
>> class C {
>> static const double one = 1.0;
>> };
>> 
>> This is because static member variable must be defined in one obj file, not
>> in headers, so that all instance of the object will reference the same
>> address. But some compilers are smart enough to know what you are trying to
>> do here and let is slide.
>> 
>> As to why you are getting this error, are you sure you are linking against
>> the correct libraries? vnl_math::pi should be defined int the vnl library.
>> 
>> victoria:bin blowek1$ nm libitkvnl.a | grep pi
>> 000016d8 S __ZN8vnl_math11one_over_piE
>> 000016e0 S __ZN8vnl_math11two_over_piE
>> 000016e8 S __ZN8vnl_math15two_over_sqrtpiE
>> 000016f0 S __ZN8vnl_math16one_over_sqrt2piE
>> 000016c0 S __ZN8vnl_math2piE
>> 000016c8 S __ZN8vnl_math9pi_over_2E
>> 000016d0 S __ZN8vnl_math9pi_over_4E
>> 
>> Hope this helps,
>> Brad
>> 
>> 
>> 
>> On Oct 22, 2009, at 4:05 PM, kent williams wrote:
>> 
>> I'm trying to build ITK on OS X with the "-O3" flag. I've never had trouble
>> with "-O2" but now I get an undefined external for vnl_math::pi.
>> 
>> The main reason to go with "-O3" is to turn on vector SIMD optimizations --
>> in one application we're trying to optimize, the biggest share of CPU is
>> used in the ImageToImageMetric, and Shark is suggesting that the loops in
>> the hot routines would benefit from vector optimizations.
>> 
>> I don't know why or from whence the problem originates, but what it looks
>> like is that the vnl_math:: constants don't get declared as variables if
>> VCL_STATIC_CONST_INIT_FLOAT_NO_DEFN is defined.
>> 
>> Now I'm no VXL library hacker,so I'm pretty much baffled by this thing.
>> 
>> _______________________________________________
>> Powered by www.kitware.com <http://www.kitware.com>
>> 
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> 
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-developers
>> 
>> ========================================================
>> 
>> Bradley Lowekamp
>> 
>> Lockheed Martin Contractor for
>> 
>> Office of High Performance Computing and Communications
>> 
>> National Library of Medicine
>> 
>> blowekamp at mail.nih.gov
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Powered by www.kitware.com
>> 
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> 
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-developers
>> 
>> 



More information about the Insight-developers mailing list