[vtkusers] Why is the image red?

Allan James ar.james at qut.edu.au
Tue Dec 15 19:42:51 EST 2009


 
Hi David,

Doesn't the use of pointer arithmetic within loops like this prevent certain compilers (for example - Intel) from performing automatic vectorization?

I'm pretty sure the Intel compilers will ignore such loops - which is a shame because the performance increase can be significant..

Cheers,

Allan James
High Performance Computing & Research Support
Queensland University of Technology
(07) 3138 9264
ar.james at qut.edu.au
http://www.qut.edu.au/its/hpc
 
><(((º>  ._.·´¯`·..  >++(((º>  ._.·´¯`·..  >++(((º>

>	On Mon, Dec 14, 2009 at 6:02 PM, David Doria <daviddoria+vtk at gmail.com> wrote:
>	>
>	> ? ? ?ptr = static_cast<T *>(image->GetScalarPointer(p0, p1, z));
>	>
>	> ? ? ?pf = drawColor;
>	> ? ? ?// Assign color to pixel.
>	> ? ? ?for (idxV = 0; idxV <= maxV; ++idxV)
>	> ? ? ? ?{
>	> ? ? ? ?*ptr = static_cast<T>(*pf++);
>	> ? ? ? ?ptr++;
>	> ? ? ? ?}
>	>
>	> Couldn't this be simply:
>	>
>	> // Assign color to pixel.
>	> for (component = 0; component <= maxV; ++component)
>	> ?{
>	> ?image->SetScalarComponentFromDouble(p0, p1, z, component, drawColor[i]);
>	> ?}
>	>
>	> This function is a template function which is called with
>	> vtkTemplateMacro. I don't understand what that is doing - isn't the
>	> whole point of templates that you don't have to declare all of these
>	> different types explicitly?
>	>
>	> Thanks,
>	>
>	> David
>
>	All of the VTK imaging filters work by doing pointer arithmetic and
>	direct access to memory.  It's the VTK convention.  It's possibly not
>	the best way for things to be done, but after you're familiar with the
>	common pointer arithmetic coding patters it's easy to read this code
>	and see what it's doing.  Really, if the main problem that I see is
>	that the variables weren't named very well.
>
>	The SetScalarComponentFromDouble() method isn't 100% inlined and it
>	involves a virtual function call, so it's far too inefficient to use
>	inside an image filter.  Not to mention that it does a few
>	multiplications and additions internally.  Yikes.
>
>	The big "switch" in the vtkTemplateMacro allows the execute methods to
>	be templated while the classes themselves aren't.  Because the filter
>	classes themselves aren't templated, an instance of a vtk filter class
>	can actually operate on any data type that you feed it.  In contrast
>	with e.g. ITK where filter instances are type specific.
>
>	   David




More information about the vtkusers mailing list