[vtk-developers] Speeding up raycasting on x86

Volpe, Christopher R (Research) volpecr at crd.ge.com
Thu Jul 11 16:18:19 EDT 2002


I've been using a variant of this technique lately as well, and I've noticed there's a couple
problems with the macro as given:

1) The shifting value of "16" (yielding the magic value 2**(52-16)) is unnecessary work, unless you
need to retain 16 bits of fixed-point fractional precision in the converted value (which you'd need
to retrieve with more bit twiddling anyway). It also limits the range of floating point values that
you can convert to be in the range +/- 2**16. (It also helps hide the second problem below:)

2) It's not completely correct. Tests I ran not too long ago show that the process causes the value
to be *rounded*, but this is not readily apparent because the rounding is, in this case, not to the
nearest int but to the nearest fraction of 1/2**16. So, for example, a value greater than (3.0 -
1/2**16), but less than 3.0,  will be rounded up to 3. This problem becomes very readily apparent if
you tweak the values so that you use the full 32 bits for the integer portion and don't reserve any
bits for fixed point fractional values, thus causing rounding to the nearest integer.

I wrote a class recently (yes, it's overkill) that encapsulates the technique in two ways: One by
providing a very fast class method that truncates to the integer portion, with full 32-bit range. The
other by providing an instance method that returns both the integer portion and the fixed point
fractional portion. A method is provided to set the number of bits reserved for the fractional
portion, which also computes the amount of un-rounding correction needed for the number of bits
reserved. There's also a method which conducts a performance test so that the benefit, or lack
thereof, can be measured on other platforms.

I wasn't originally planning on putting this in the repository, but since the topic just came up
here, I'll attach the source and header files for your review or reading pleasure. References for the
technique are in the header file.



Chris




> -----Original Message-----
> From: David Gobbi [mailto:dgobbi at imaging.robarts.ca]
> Sent: Thursday, July 11, 2002 3:23 PM
> To: Lisa Avila
> Cc: vtk-developers at public.kitware.com
> Subject: Re: [vtk-developers] Speeding up raycasting on x86
> 
> 
> On Thu, 11 Jul 2002, Lisa Avila wrote:
> 
> > Hi David,
> >
> > I had tried something similar to this in another place at 
> one time and did
> > not see a significant improvement so I abandoned it. It 
> seems like you have
> > found a good place to use it if you've made a 35% 
> performance improvement!
> >
> > Does this generate compiler warnings? If it doesn't then I 
> see no reason
> > not to use it.
> 
> No compiler warnings, that same inline function already exists in
> vtkImageReslice.
> 
> I can put the inline func into vtkVolumeRayCastMapper.h as a 
> replacement
> for the vtkFloorFuncMacro().  At the same time I'll also replace the
> vtkRoundFuncMacro() with one that has #ifdefs for iX86.  That will
> provide speedups for NearestNeighbor raycasting as well.
> 
> And all of this is necessary just because the engineers that designed
> the 386 didn't include a 'truncate to int' instruction, only 
> a 'convert
> float to int according to prevailing rounding mode' where 
> every operating
> system uses 'round to nearest' as the default mode.
> 
>  - David
> 
> 
> > At 02:15 PM 7/11/2002, David Gobbi wrote:
> > >Hi Lisa,
> > >
> > >I tried a little experiment with vtkVolumeRayCastCompositeFunction
> > >and managed a speed-up of 35% in VTK's trilinear ray casting.
> > >
> > >I replaced all instances of
> > >
> > >  <something> = (int)(floatval)
> > >
> > >with
> > >
> > >  <something> = vtkQuickFloor(floatval)
> > >
> > >according to the following definition of vtkQuickFloor:
> > >
> > >inline int vtkQuickFloor(double x)
> > >{
> > >#if defined i386 || defined _M_IX86
> > >   unsigned int hilo[2];
> > >   *((double *)hilo) = x + 103079215104.0;  // (2**(52-16))*1.5
> > >   return (int)((hilo[1]<<16)|(hilo[0]>>16));
> > >#else
> > >   return (int)(x);
> > >#endif
> > >}
> > >
> > >That big mess with the bitshifts and whatnot is a trick 
> that I found
> > >on a web page a couple years ago (I could dig up the URL) 
> that works
> > >many times faster than what most iX86 compilers generate for (int)
> > >casts.  I've been using it in vtkImageReslice for a while now.
> > >
> > >Is this the sort of optimization that Kitware is interested in?
> > >It is messy and CPU-specific, but it is confined to one single
> > >inline function.
> > >
> > >  - David
> > >
> > >_______________________________________________
> > >vtk-developers mailing list
> > >vtk-developers at public.kitware.com
> > >http://public.kitware.com/mailman/listinfo/vtk-developers
> >
> 
> _______________________________________________
> vtk-developers mailing list
> vtk-developers at public.kitware.com
> http://public.kitware.com/mailman/listinfo/vtk-developers
> 


begin 600 vtkFastFloat2Fixed.cxx
M+RH]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]#0H-"B`@4')O9W)A;3H@
M("!6:7-U86QI>F%T:6]N(%1O;VQK:70-"B`@36]D=6QE.B`@("`D4D-39FEL
M93H@=G1K1F%S=$9L;V%T,D9I>&5D+F-X>"QV("0-"B`@3&%N9W5A9V4Z("!#
M*RL-"B`@1&%T93H@("`@("`D1&%T93H@)`T*("!697)S:6]N.B`@("12979I
M<VEO;CH@)`T*#0H-"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3TJ+PT*
M+R\@+DY!344@=G1K1F%S=$9L;V%T,D9I>&5D("T at 16YA8FQE<R!F87-T(&-O
M;G9E<G-I;VX@;V8 at 9FQO871I;F<@<&]I;G0@=&\@9FEX960@<&]I;G0-"B\O
M("Y314-424].($1E<V-R:7!T:6]N#0HO+R!V=&M&87-T1FQO870R1FEX960@
M=7-E<R!A('!O<G1A8FQE("AA<W-U;6EN9R!)145%(&9O<FUA="D@;65T:&]D
M(&9O<B!C;VYV97)T:6YG('-I;F=L92!A;F0-"B\O(&1O=6)L92!P<F5C:7-I
M;VX at 9FQO871I;F<@<&]I;G0@=F%L=65S('1O(&$@9FEX960@<&]I;G0@<F5P
M<F5S96YT871I;VXN(%1H:7, at 86QL;W=S(&9A<W0-"B\O(&EN=&5G97(@=')U
M;F-A=&EO;B!O;B!P;&%T9F]R;7,L('-U8V@@87, at 26YT96P@6#@V+"!I;B!W
M:&EC:"!#4%4 at 9FQO871I;F<@<&]I;G0@=')U;F-A=&EO;@T*+R\@86QG;W)I
M=&AM<R!A<F4@=F5R>2!S;&]W+B!)="!I<R!B87-E9"!O;B!T:&4@=&5C:&YI
M<75E<R!D97-C<FEB960@:6X at 0VAR:7, at 2&5C:V5R)W, at 87)T:6-L92P-"B\O
M("),970G<R!'970@=&\@=&AE("A&;&]A=&EN9RD at 4&]I;G0B+"!I;B!'86UE
M($1E=F5L;W!E<B!-86=A>FEN9RP at 1F5B+TUA<B`Q.3DV+"!A;F0@=&AE#0HO
M+R!T96-H;FEQ=65S(&1E<V-R:6)E9"!I;B!-:6-H865L($AE<F8G<R!W96)S
M:71E+"!H='1P.B\O=W=W+G-T97)E;W!S:7,N8V]M+T9052YH=&UL+B`-"B\O
M(%5N9F]R='5N871E;'DL(&5A8V@@;V8@=&AE<V4@=&5C:&YI<75E<R!I<R!I
M;F-O;7!L971E+"!A;F0 at 9&]E<VXG="!T<G5N8V%T92!P<F]P97)L>2P-"B\O
M(&EN(&$@=V%Y('1H870 at 9&5P96YD<R!O;B!H;W<@;6%N>2!B:71S(&%R92!R
M97-E<G9E9"!F;W(@9FEX960@<&]I;G0 at 9G)A8W1I;VYA;"!U<V4N(%1H=7,L
M#0HO+R!M>2!I;7!L96UE;G1A=&EO;B!I;F-O<G!O<F%T97,@<V]M92!R;W5N
M9&EN9R!C;W)R96-T:6]N('1H870@=6YD;V5S('1H92!R;W5N9&EN9R!T:&%T
M('1H92`-"B\O($9052!P97)F;W)M<R!D=7)I;F<@9&5N;W)M86QI>F%T:6]N
M(&]F('1H92!F;&]A=&EN9R!P;VEN="!V86QU92X@#0H-"B-I;F-L=61E(")V
M=&M&87-T1FQO870R1FEX960N:"(-"B-I;F-L=61E(")V=&M/8FIE8W1&86-T
M;W)Y+F at B#0HC:6YC;'5D92`B=G1K5&EM97),;V<N:"(-"@T*#0HO+RTM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2T-"B\O($1E<V-R:7!T:6]N. at T*
M+R\@0V]N<W1R=6-T(&%N(&EN<W1A;F-E(`T*+R\M+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2T-"G9T:T9A<W1&;&]A=#)&:7AE9"`J=G1K1F%S
M=$9L;V%T,D9I>&5D.CI.97<H*0T*>PT*("`O+R!&:7)S="!T<GD@=&\@8W)E
M871E('1H92!O8FIE8W0 at 9G)O;2!T:&4@=G1K3V)J96-T1F%C=&]R>0T*("!V
M=&M/8FIE8W0J(')E="`]('9T:T]B:F5C=$9A8W1O<GDZ.D-R96%T94EN<W1A
M;F-E*")V=&M&87-T1FQO870R1FEX960B*3L-"B`@:68H<F5T*0T*("`@('L-
M"B`@("!R971U<FX@*'9T:T9A<W1&;&]A=#)&:7AE9"HI<F5T.PT*("`@('T-
M"B`@+R\@268@=&AE(&9A8W1O<GD@=V%S('5N86)L92!T;R!C<F5A=&4@=&AE
M(&]B:F5C="P@=&AE;B!C<F5A=&4@:70@:&5R92X-"B`@<F5T=7)N(&YE=R!V
M=&M&87-T1FQO870R1FEX960[#0I]#0H-"FEN="!V=&M&87-T1FQO870R1FEX
M960Z.E1E<W11=6EC:U1R=6YC*&1O=6)L92!V86PI#0H@('L-"B`@<F5T=7)N
M('9T:T9A<W1&;&]A=#)&:7AE9#HZ475I8VM4<G5N8RAV86PI.PT*("!]#0H-
M"FEN="!V=&M&87-T1FQO870R1FEX960Z.E1E<W1#;VYV97)T1FEX9610;VEN
M=$EN=%!A<G0H9&]U8FQE('9A;"D-"B`@>PT*("!I;G0 at 9G)A8SL-"B`@<F5T
M=7)N('1H:7,M/D-O;G9E<G1&:7AE9%!O:6YT*'9A;"P at 9G)A8RD[#0H@('T-
M"@T*:6YT('9T:T9A<W1&;&]A=#)&:7AE9#HZ5&5S=$-O;G9E<G1&:7AE9%!O
M:6YT1G)A8U!A<G0H9&]U8FQE('9A;"D-"B`@>PT*("!I;G0 at 9G)A8SL-"B`@
M=&AI<RT^0V]N=F5R=$9I>&5D4&]I;G0H=F%L+"!F<F%C*3L-"B`@<F5T=7)N
M(&9R86,[#0H@('T-"@T*=F]I9"!V=&M&87-T1FQO870R1FEX960Z.DEN=&5R
M;F%L4F5B=6EL9"@I#0H@('L-"B`@:6YT(&D[(`T*("!T:&ES+3YF:7A2;W5N
M9#TN-3L-"B`@9F]R("AI/71H:7,M/FEN=&5R;F%L4F5S97)V961&<F%C0FET
M<SL@:3L@:2TM*0T*("`@('L-"B`@("!T:&ES+3YF:7A2;W5N9"`J/2`N-3L-
M"B`@("!]#0H@('1H:7,M/F9R86--87-K(#T@*#$\/'1H:7,M/FEN=&5R;F%L
M4F5S97)V961&<F%C0FET<RDM,3L-"B`@=&AI<RT^9G!$96YO<FUA;&EZ97(@
M/2`H*"AU;G-I9VYE9"!L;VYG*3$I(#P\("@U,BTS,"UT:&ES+3YI;G1E<FYA
M;%)E<V5R=F5D1G)A8T)I=',I*2`J(`T*("`@('1H:7,M/G1W;S,P*"D@*B!T
M:&ES+3Y";W)R;W=":70H*3L-"B`@?0T*#0H-"G9O:60@=G1K1F%S=$9L;V%T
M,D9I>&5D.CI0<FEN=%-E;&8H;W-T<F5A;2`F;W,L('9T:TEN9&5N="!I;F1E
M;G0I#0H@('L-"B`@;W,@/#P@:6YD96YT(#P\(")297-E<G9E9$9R86-":71S
M.B`B(#P\('1H:7,M/FEN=&5R;F%L4F5S97)V961&<F%C0FET<R`\/"!E;F1L
M.PT*("!O<R`\/"!I;F1E;G0@/#P@(D)A<F4@=&EM92!F<F]M(&QA<W0 at 4&5R
M9F]R;6%N8V5497-T*"D at 8V%L;#H@(B`\/"!T:&ES+3YB87)E7W1I;64@/#P@
M96YD;#L-"B`@;W,@/#P@:6YD96YT(#P\(")#87-T('1I;64 at 9G)O;2!L87-T
M(%!E<F9O<FUA;F-E5&5S="@I(&-A;&PZ("(@/#P@=&AI<RT^8V%S=%]T:6UE
M(#P\(&5N9&P[#0H@(&]S(#P\(&EN9&5N="`\/"`B0V]N=F5R=$9I>&5D4&]I
M;G0@=&EM92!F<F]M(&QA<W0 at 4&5R9F]R;6%N8V5497-T*"D at 8V%L;#H@(B`\
M/"!T:&ES+3YC;VYV97)T7W1I;64@/#P at 96YD;#L-"B`@;W,@/#P@:6YD96YT
M(#P\(")1=6EC:U1R=6YC('1I;64 at 9G)O;2!L87-T(%!E<F9O<FUA;F-E5&5S
M="@I(&-A;&PZ("(@/#P@=&AI<RT^<75I8VMT<G5N8U]T:6UE(#P\(&5N9&P[
M#0H@(&]S(#P\(&EN9&5N="`\/"`B4W!E961U<"!R871I;R!F<F]M(&-A<W0@
M=&\@<75I8VMT<G5N8R!I<SH@(B`\/"`-"B`@("`H=&AI<RT^8V%S=%]T:6UE
M+71H:7,M/F)A<F5?=&EM92DO*'1H:7,M/G%U:6-K=')U;F-?=&EM92UT:&ES
M+3YB87)E7W1I;64I(#P\(&5N9&P[#0H@('T-"@T*#0IV;VED('9T:T9A<W1&
M;&]A=#)&:7AE9#HZ4&5R9F]R;6%N8V5497-T<RAV;VED*0T*("![#0H@(&-O
M;G-T(&EN="!I;FYE<E]C;W5N="`](#$P,#`P.PT*("!C;VYS="!I;G0@;W5T
M97)?8V]U;G0@/2`Q,#`P,#L-"B`@9&]U8FQE("ID=F%L(#T@;F5W(&1O=6)L
M95MI;FYE<E]C;W5N=%T[#0H@(&EN="`J:79A;"`](&YE=R!I;G1;:6YN97)?
M8V]U;G1=.PT*("!I;G0@*F9R86,@/2!N97<@:6YT6VEN;F5R7V-O=6YT73L-
M"@T*("`-"B`@:6YT(&DL;SL-"B`@=G1K5&EM97),;V<@*G1I;65R(#T@=G1K
M5&EM97),;V<Z.DYE=R at I.PT*#0H@(&9O<B`H:3TP.R!I/&EN;F5R7V-O=6YT
M.R!I*RLI#0H@("`@>PT*("`@(&1V86Q;:5T@/2`P+C`[#0H@("`@:79A;%MI
M72`](#`[#0H@("`@?0T*#0H@("\O($YO=&4Z($-A;&QS('1O(")D;R!N;W1H
M:6YG(B!A<F4@=&AE<F4@=&\@9&ES8V]U<F%G92!T:&4@;W!T:6UI>F5R(&9R
M;VT@#0H@("\O('1H:6YK:6YG('1H870@=&AE(&-O;7!U=&%T:6]N<R!D;VYE
M(&EN<VED92!E86-H(&QO;W`@87)E('5N=7-E9"!B96-A=7-E#0H@("\O('1H
M92!R97-U;'1S(&%R92!O=F5R=W)I='1E;B!B>2!T:&4@;F5X="!L;V]P+ at T*
M("`O+R!#;VUP=71E(&)A<F4@;&]O<"!T:6UE#0H@('1I;65R+3Y3=&%R=%1I
M;65R*"D[#0H@(&9O<B`H;STP.R!O/&]U=&5R7V-O=6YT.R!O*RLI#0H@("`@
M>PT*("`@(&9O<B`H:3TP.R!I/&EN;F5R7V-O=6YT.R!I*RLI#0H@("`@("![
M#0H@("`@("`O+R!0=7)E(&)I="!C;W!Y#0H@("`@("!I=F%L6VE=(#T@*B at H
M:6YT("HI*"9D=F%L6VE=*2D[#0H@("`@("!]#0H@("`@?0T*("!T:6UE<BT^
M4W1O<%1I;65R*"D[#0H@('1H:7,M/F)A<F5?=&EM92`]('1I;65R+3Y'971%
M;&%P<V5D5&EM92 at I.PT*("`-"B`-"B`@+R\@0V]M<'5T92!C87-T('1I;64-
M"B`@=&EM97(M/E-T87)T5&EM97(H*3L-"B`@9F]R("AO/3`[(&\\;W5T97)?
M8V]U;G0[(&\K*RD-"B`@("![#0H@("`@9F]R("AI/3`[(&D\:6YN97)?8V]U
M;G0[(&DK*RD-"B`@("`@('L-"B`@("`@(&EV86Q;:5T@/2`H:6YT*2!D=F%L
M6VE=.PT*("`@("`@?0T*("`@('T-"B`@=&EM97(M/E-T;W!4:6UE<B at I.PT*
M("!T:&ES+3YC87-T7W1I;64@/2!T:6UE<BT^1V5T16QA<'-E9%1I;64H*3L-
M"@T*#0H@("\O($-O;7!U=&4 at 8V]N=F5R="!T:6UE#0H@('1I;65R+3Y3=&%R
M=%1I;65R*"D[#0H@(&9O<B`H;STP.R!O/&]U=&5R7V-O=6YT.R!O*RLI#0H@
M("`@>PT*("`@(&9O<B`H:3TP.R!I/&EN;F5R7V-O=6YT.R!I*RLI#0H@("`@
M("![#0H@("`@("!I=F%L6VE=(#T@=&AI<RT^0V]N=F5R=$9I>&5D4&]I;G0H
M9'9A;%MI72P at 9G)A8UMI72D[#0H@("`@("!]#0H@("`@?0T*("!T:6UE<BT^
M4W1O<%1I;65R*"D[#0H@('1H:7,M/F-O;G9E<G1?=&EM92`]('1I;65R+3Y'
M971%;&%P<V5D5&EM92 at I.PT*#0H@("\O($-O;7!U=&4@<75I8VMT<G5N8R!T
M:6UE#0H@('1I;65R+3Y3=&%R=%1I;65R*"D[#0H@(&9O<B`H;STP.R!O/&]U
M=&5R7V-O=6YT.R!O*RLI#0H@("`@>PT*("`@(&9O<B`H:3TP.R!I/&EN;F5R
M7V-O=6YT.R!I*RLI#0H@("`@("![#0H@("`@("!I=F%L6VE=(#T@=G1K1F%S
M=$9L;V%T,D9I>&5D.CI1=6EC:U1R=6YC*&1V86Q;:5TI.PT*("`@("`@?0T*
M("`@('T-"B`@=&EM97(M/E-T;W!4:6UE<B at I.PT*("!T:&ES+3YQ=6EC:W1R
M=6YC7W1I;64@/2!T:6UE<BT^1V5T16QA<'-E9%1I;64H*3L-"@T*("!D96QE
M=&4 at 6UT@9'9A;#L-"B`@9&5L971E(%M=(&EV86P[#0H@(&1E;&5T92!;72!F
A<F%C.PT*#0H@('1I;65R+3Y$96QE=&4H*3L-"B`@?0T*
`
end

begin 600 vtkFastFloat2Fixed.h
M+RH]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]#0H-"B`@4')O9W)A;3H@
M("!6:7-U86QI>F%T:6]N(%1O;VQK:70-"B`@36]D=6QE.B`@("`D4D-39FEL
M93H@=G1K1F%S=$9L;V%T,D9I>&5D+F at L=B`D#0H@($QA;F=U86=E.B`@0RLK
M#0H@($1A=&4Z("`@("`@)$1A=&4Z("`D#0H@(%9E<G-I;VXZ("`@)%)E=FES
M:6]N.B`@)`T*("`-"B`@("`-"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3TJ+PT*+R\@+DY!344@=G1K1F%S=$9L;V%T,D9I>&5D("T at 16YA8FQE<R!F
M87-T(&-O;G9E<G-I;VX@;V8 at 9FQO871I;F<@<&]I;G0@=&\@9FEX960@<&]I
M;G0-"B\O("Y314-424].($1E<V-R:7!T:6]N#0HO+R!V=&M&87-T1FQO870R
M1FEX960@=7-E<R!A('!O<G1A8FQE("AA<W-U;6EN9R!)145%(&9O<FUA="D@
M;65T:&]D(&9O<B!C;VYV97)T:6YG('-I;F=L92!A;F0-"B\O(&1O=6)L92!P
M<F5C:7-I;VX at 9FQO871I;F<@<&]I;G0@=F%L=65S('1O(&$@9FEX960@<&]I
M;G0@<F5P<F5S96YT871I;VXN(%1H:7, at 86QL;W=S(&9A<W0-"B\O(&EN=&5G
M97(@=')U;F-A=&EO;B!O;B!P;&%T9F]R;7,L('-U8V@@87, at 26YT96P@6#@V
M+"!I;B!W:&EC:"!#4%4 at 9FQO871I;F<@<&]I;G0@=')U;F-A=&EO;@T*+R\@
M86QG;W)I=&AM<R!A<F4@=F5R>2!S;&]W+B!)="!I<R!B87-E9"!O;B!T:&4@
M=&5C:&YI<75E<R!D97-C<FEB960@:6X at 0VAR:7, at 2&5C:V5R)W, at 87)T:6-L
M92P-"B\O("),970G<R!'970@=&\@=&AE("A&;&]A=&EN9RD at 4&]I;G0B+"!I
M;B!'86UE($1E=F5L;W!E<B!-86=A>FEN9RP at 1F5B+TUA<B`Q.3DV+"!A;F0@
M=&AE#0HO+R!T96-H;FEQ=65S(&1E<V-R:6)E9"!I;B!-:6-H865L($AE<F8G
M<R!W96)S:71E+"!H='1P.B\O=W=W+G-T97)E;W!S:7,N8V]M+T9052YH=&UL
M+B`-"B\O(%5N9F]R='5N871E;'DL(&5A8V@@;V8@=&AE<V4@=&5C:&YI<75E
M<R!I<R!I;F-O;7!L971E+"!A;F0 at 9&]E<VXG="!T<G5N8V%T92!P<F]P97)L
M>2P-"B\O(&EN(&$@=V%Y('1H870 at 9&5P96YD<R!O;B!H;W<@;6%N>2!B:71S
M(&%R92!R97-E<G9E9"!F;W(@9FEX960@<&]I;G0 at 9G)A8W1I;VYA;"!U<V4N
M(%1H=7,L#0HO+R!M>2!I;7!L96UE;G1A=&EO;B!I;F-O<G!O<F%T97,@<V]M
M92!R;W5N9&EN9R!C;W)R96-T:6]N('1H870@=6YD;V5S('1H92!R;W5N9&EN
M9R!T:&%T('1H92`-"B\O($9052!P97)F;W)M<R!D=7)I;F<@9&5N;W)M86QI
M>F%T:6]N(&]F('1H92!F;&]A=&EN9R!P;VEN="!V86QU92X@#0H-"B-I;F-L
M=61E(")V=&M/8FIE8W0N:"(-"B-I9FYD968 at 7U]V=&M&87-T1FQO870R1FEX
M961?:`T*(V1E9FEN92!?7W9T:T9A<W1&;&]A=#)&:7AE9%]H#0H-"B\O(%-H
M;W5L9"!B92`P(&]N($EN=&5L(&%R8VAI=&5C='5R97,L(`T*(V1E9FEN92!&
M1C)&7T)I9T5N9&EA;B`P#0H-"F-L87-S(%942U]%6%!/4E0@=G1K1F%S=$9L
M;V%T,D9I>&5D(#H@<'5B;&EC('9T:T]B:F5C=`T*("![#0H@('!U8FQI8SH-
M"B`@("!S=&%T:6,@=G1K1F%S=$9L;V%T,D9I>&5D("I.97<H*3L-"B`@("!V
M=&M4>7!E36%C<F\H=G1K1F%S=$9L;V%T,D9I>&5D+"!V=&M/8FIE8W0I.PT*
M("`@('9O:60 at 4')I;G1396QF*&]S=')E86TF(&]S+"!V=&M);F1E;G0@:6YD
M96YT*3L-"@T*("`@("\O($1E<V-R:7!T:6]N. at T*("`@("\O(%=R87!P86)L
M92!F=6YC=&EO;B!F;W(@<V-R:7!T+71E<W1I;F<@;V8 at 8V]R<F5C="!C<F]S
M<RUP;&%T9F]R;2!F=6YC=&EO;F%L:71Y#0H@("`@:6YT(%1E<W11=6EC:U1R
M=6YC*&1O=6)L92!V86PI.PT*#0H@("`@+R\@1&5S8W)I<'1I;VXZ#0H@("`@
M+R\@5W)A<'!A8FQE(&9U;F-T:6]N(&9O<B!S8W)I<'0M=&5S=&EN9R!O9B!C
M;W)R96-T(&-R;W-S+7!L871F;W)M(&9U;F-T:6]N86QI='D-"B`@("!I;G0@
M5&5S=$-O;G9E<G1&:7AE9%!O:6YT26YT4&%R="AD;W5B;&4@=F%L*3L-"@T*
M("`@("\O($1E<V-R:7!T:6]N. at T*("`@("\O(%=R87!P86)L92!F=6YC=&EO
M;B!F;W(@<V-R:7!T+71E<W1I;F<@;V8 at 8V]R<F5C="!C<F]S<RUP;&%T9F]R
M;2!F=6YC=&EO;F%L:71Y#0H@("`@:6YT(%1E<W1#;VYV97)T1FEX9610;VEN
M=$9R86-087)T*&1O=6)L92!V86PI.PT*("`@(`T*("!P<F]T96-T960Z#0HO
M+T)46`T*("`@("\O($1E<V-R:7!T:6]N. at T*("`@("\O($EN=&5R;F%L('5S
M93H@;75L=&EP;'D@=&AE(&1E;F]R;6%L:7IE<B!V86QU92!B>2`Q+C4@=&\@
M96YS=7)E('1H870@:70-"B`@("`O+R!H87, at 82`B,2(@8FET+"!O=&AE<B!T
M:&%N('1H92!I;7!L:6-I="!I;FET:6%L("(Q(B!B:70L(&9R;VT@=VAI8V@@
M=&\@8F]R<F]W#0H@("`@+R\@=VAE;B!A9&1I;F<@*'1R=6YC871I;F<I(&$@
M;F5G871I=F4@;G5M8F5R+"!S;R!T:&%T('=E(&1O;B=T(&)O<G)O=R!F<F]M
M#0H@("`@+R\@=&AE(&EM<&QI8VET("(Q(B!B:70L('=H:6-H('=O=6QD(&-A
M=7-E('!A<G1I86P@<F4M;F]R;6%L:7IA=&EO;BP@<F5S=6QT:6YG#0H@("`@
M+R\@:6X at 82!S:&EF="!O9B!O=7(@:6YT96=E<B!B:71S+ at T*("`@('-T871I
M8R!I;FQI;F4 at 9&]U8FQE($)O<G)O=T)I="@I('L@<F5T=7)N(#$N-3M].PT*
M("`@(`T*("`@("\O($1E<V-R:7!T:6]N.B!297!R97-E;G0@,EXS,"!A<R!A
M(&1O=6)L92!P<F5C:7-I;VX at 9FQO870N(%5S92!A<R!A('-T97!P:6YG#0H@
M("`@+R\@<W1O;F4 at 9F]R(&-O;7!U=&EN9R`R7C4R(&%S(&$@9&]U8FQE+"!S
M:6YC92!W92!C86XG="!R97!R97-E;G0@,EXU,B!A<R!A;@T*("`@("\O(&EN
M="!B969O<F4 at 8V]N=F5R=&EN9R!T;R!D;W5B;&4N#0H@("`@<W1A=&EC(&EN
M;&EN92!D;W5B;&4@='=O,S`H*2![(')E='5R;B`H9&]U8FQE*2 at H*'5N<VEG
M;F5D(&QO;F<I,2D@/#P@,S`I.R!].PT*("`@(`T*("`@("\O($1E<V-R:7!T
M:6]N.B!297!R97-E;G0@,EXU,B!A<R!A(&1O=6)L92!P<F5C:7-I;VX at 9FQO
M870N(%1H:7,@=F%L=64@:7,@#0H@("`@+R\@<VEG;FEF:6-A;G0 at 8F5C875S
M92!D;W5B;&5S(&AA=F4 at -3(@8FET<R!O9B!P<F5C:7-I;VX@:6X@=&AE(&UA
M;G1I<W-A#0H@("`@<W1A=&EC(&EN;&EN92!D;W5B;&4@='=O-3(H*2![(')E
M='5R;B`H*"AU;G-I9VYE9"!L;VYG*3$I(#P\("@U,BTS,"DI("H@='=O,S`H
M*3L@?3L-"B`@("`-"B`@("`O+R!4:&ES(&ES('1H92!M86=I8R!F;&]A=&EN
M9R!P;VEN="!V86QU92!W:&EC:"!W:&5N(&%D9&5D('1O(&%N>2!O=&AE<B`-
M"B`@("`O+R!F;&]A=&EN9R!P;VEN="!V86QU92P at 8V%U<V5S('1H92!R;W5N
M9&5D(&EN=&5G97(@<&]R=&EO;B!O9B!T:&%T(`T*("`@("\O(&9L;V%T:6YG
M('!O:6YT('9A;'5E('1O(&%P<&5A<B!I;B!T:&4@;&5A<W0@<VEG;FEF:6-A
M;G0 at 8FET<R!O9B!T:&4-"B`@("`O+R!M86YT:7-S82P@=VAI8V@@:7,@=VAA
M="!W92!W86YT+ at T*("`@('-T871I8R!I;FQI;F4 at 9&]U8FQE('1R=6YC1&5N
M;W)M86QI>F5R*"D@>R!R971U<FX@='=O-3(H*2`J($)O<G)O=T)I="@I.R!]
M.PT*("`@(`T*("`@(`T*#0H@("`@#0HC:68 at 1D8R1E]":6=%;F1I86X-"B`@
M("!E;G5M('ME>'!O;F5N=%]P;W,@/0DP+"!M86YT:7-S85]P;W,@/0DQ?3L-
M"B-E;'-E#0H@("`@96YU;2![97AP;VYE;G1?<&]S(#T),2P@;6%N=&ES<V%?
M<&]S(#T),'T[#0HC96YD:68 at +R]&1C)&7T)I9T5N9&EA;@T*+R]%5%@-"@T*
M("!P=6)L:6,Z#0H@("`@#0H@("`@+R\@1&5S8W)I<'1I;VXZ#0H@("`@+R\@
M4V5T('1H92!N=6UB97(@;V8 at 8FET<R!R97-E<G9E9"!F;W(@9G)A8W1I;VYA
M;"!P<F5C:7-I;VX@=&AA="!A<F4@#0H@("`@+R\@;6%I;G1A:6YE9"!A<R!P
M87)T(&]F('1H92!T<G5N8V%T:6]N('!R;V-E<W,N(%1H:7,@;G5M8F5R(&%F
M9F5C=',@=&AE#0H@("`@+R\@=')U;F-A=&EO;B!A<FET:&UE=&EC+B!)="!M
M87D at 8F4@=7-E9G5L(&EF('1H92!F86-T:6]N86P@<&%R="!I<R!T;R!B90T*
M("`@("\O('5S960@=&\@:6YD97@@:6YT;R!A(&QO;VMU<"!T86)L92!O9B!S
M;VUE('-O<G0N($AO=V5V97(L(&EF('EO=2!A<F4@;VYL>0T*("`@("\O(&EN
M=&5R97-T960@:6X@:VYO=VEN9R!T:&4 at 9G)A8W1I;VYA;"!R96UA:6YD97(@
M869T97(@=')U;F-A=&EO;BP@=&AE<F4 at 9&]E<VXG=`T*("`@("\O(&%P<&5A
M<B!T;R!B92!A;GD at 861V86YT86=E('1O('5S:6YG('1H97-E(&)I=',L(&5I
M=&AE<B!I;B!T97)M<R!O9B!A(`T*("`@("\O(&QO;VMU<"!T86)L92P@;W(@
M8GD at 9&ER96-T;'D@;75L=&EP;'EI;F<@8GD@<V]M92!U;FET(&9R86-T:6]N
M+"!O=F5R('-I;7!L>0T*("`@("\O('-U8G1R86-T:6YG('1H92!T<G5N8V%T
M960@=F%L=64 at 9G)O;2!T:&4@;W)I9VEN86P@=F%L=64N($YO=&4@=&AA="`-
M"B`@("`O+R!S:6YC92!O;FQY(#,R(&)I=', at 87)E('5S960 at 9F]R('1H92!E
M;G1I<F4 at 9FEX960@<&]I;G0@<F5P<F5S96YT871I;VXL#0H@("`@+R\@:6YC
M<F5A<VEN9R!T:&4@;G5M8F5R(&]F(')E<V5R=F5D(&9R86-T:6]N86P at 8FET
M<R!R961U8V5S('1H92!R86YG92!O9B`-"B`@("`O+R!I;G1E9V5R('9A;'5E
M<R!T:&%T(&-A;B!B92!T<G5N8V%T960@=&\N(`T*("`@('9O:60 at 4V5T4F5S
M97)V961&<F%C0FET<RAI;G0 at 8FET<RD-"B`@("`@('L-"B`@("`@('5N<VEG
M;F5D(&QO;F<@;71I;64@/2!T:&ES+3Y'971-5&EM92 at I.PT*("`@("`@=&AI
M<RT^4V5T:6YT97)N86Q297-E<G9E9$9R86-":71S*&)I=',I.PT*("`@("`@
M:68@*&UT:6UE("$]('1H:7,M/D=E=$U4:6UE*"DI#0H@("`@("`@('L-"B`@
M("`@("`@=&AI<RT^26YT97)N86Q296)U:6QD*"D[#0H@("`@("`@('T-"B`@
M("`@('T[#0H-"B`@("`O+R!$97-C<FEP=&EO;CH-"B`@("`O+R!#;VYD=6-T
M('1I;6EN9R!T97-T<R!S;R!T:&%T('1H92!U<V5F=6QN97-S(&]F('1H:7,@
M8VQA<W, at 8V%N(&)E(&%S8V5R=&%I;F5D(`T*("`@("\O(&]N('=H871E=F5R
M('!L871F;W)M(&ET(&ES(&)E:6YG('5S960N($]U='!U="!C86X at 8F4@<F5T
M<FEE=F5D('9I82!0<FEN="!M971H;V0N#0H@("`@=F]I9"!097)F;W)M86YC
M951E<W1S*'9O:60I.R`@("`-"B`@("`-"B\O0E18#0H@("`@+R\@1&5S8W)I
M<'1I;VXZ#0H@("`@+R\@4&5R9F]R;2!A('%U:6-K('1R=6YC871I;VX@;V8@
M=&AE(&1O=6)L92UP<F5C:7-I;VX at 9FQO871I;F<@<&]I;G0-"B`@("`O+R!V
M86QU90T*("`@(&EN;&EN92!S=&%T:6,@:6YT(%%U:6-K5')U;F,H8V]N<W0@
M9&]U8FQE("9V86PI#0H@("`@("![#0H@("`@("!D;W5B;&4@=&5M<'9A;#L-
M"B`@("`@('1E;7!V86P@/2`H=F%L("T at +C4I("L@=')U;F-$96YO<FUA;&EZ
M97(H*3L-"B`@("`@(')E='5R;B`H*&EN="HI)G1E;7!V86PI6VUA;G1I<W-A
M7W!O<UT[#0H@("`@("!]#0H-"@T*("`@("\O($1E<V-R:7!T:6]N. at T*("`@
M("\O($-O;G9E<G0@=&AE('9A;'5E('1O(&$@9FEX960@<&]I;G0@<F5P<F5S
M96YT871I;VXL(')E='5R;FEN9R!T:&4-"B`@("`O+R!I;G1E9V5R('!O<G1I
M;VX at 87, at 9G5N8W1I;VX@=F%L=64L(&%N9"!R971U<FYI;F<@=&AE(&9R86-T
M:6]N86P-"B`@("`O+R!P87)T(&EN('1H92!S96-O;F0@<&%R86UE=&5R+ at T*
M("`@(&EN;&EN92!I;G0 at 0V]N=F5R=$9I>&5D4&]I;G0H8V]N<W0 at 9&]U8FQE
M("9V86PL(&EN="`F9G)A8U!A<G0I#0H@("`@("![#0H@("`@("!D;W5B;&4@
M=&5M<'9A;#L-"B`@("`@('1E;7!V86P)"3T@*'9A;"`M(&9I>%)O=6YD*2`K
M('1H:7,M/F9P1&5N;W)M86QI>F5R.PT*("`@("`@9G)A8U!A<G0@/2`H*&EN
M="HI)G1E;7!V86PI6VUA;G1I<W-A7W!O<UT@)B!F<F%C36%S:SL-"B`@("`@
M(')E='5R;B`H*&EN="HI)G1E;7!V86PI6VUA;G1I<W-A7W!O<UT@/CX@=&AI
M<RT^:6YT97)N86Q297-E<G9E9$9R86-":71S.PT*("`@("`@?0T*+R]%5%@-
M"@T*#0H@('!R;W1E8W1E9#H-"B\O0E18#0H@("`@=G1K1F%S=$9L;V%T,D9I
M>&5D*"D-"B`@("`@('L-"B`@("`@('1H:7,M/F9I>%)O=6YD(#T@,#L-"B`@
M("`@('1H:7,M/FEN=&5R;F%L4F5S97)V961&<F%C0FET<R`](#`[#0H@("`@
M("!T:&ES+3YF<F%C36%S:R`](#`[#0H@("`@("!T:&ES+3YF<$1E;F]R;6%L
M:7IE<B`](#`[#0H@("`@("!T:&ES+3YB87)E7W1I;64@/2`P.PT*("`@("`@
M=&AI<RT^8V%S=%]T:6UE(#T@,#L-"B`@("`@('1H:7,M/F-O;G9E<G1?=&EM
M92`](#`[#0H@("`@("!T:&ES+3YQ=6EC:W1R=6YC7W1I;64@/2`P.PT*("`@
M("`@=&AI<RT^26YT97)N86Q296)U:6QD*"D[#0H@("`@("!].PT*("`@('YV
M=&M&87-T1FQO870R1FEX960H*2![?3L-"B`@("!V=&M&87-T1FQO870R1FEX
M960H8V]N<W0@=G1K1F%S=$9L;V%T,D9I>&5D)BD@>WT[#0H@("`@=F]I9"!O
M<&5R871O<CTH8V]N<W0@=G1K1F%S=$9L;V%T,D9I>&5D)BD@>WT[#0H@("`@
M=F]I9"!);G1E<FYA;%)E8G5I;&0H=F]I9"D[#0H@("`@#0H@('!R:79A=&4Z
M#0H@("`@=G1K4V5T36%C<F\H:6YT97)N86Q297-E<G9E9$9R86-":71S+"!I
M;G0I.PT*("`@('9T:T=E=$UA8W)O*&EN=&5R;F%L4F5S97)V961&<F%C0FET
M<RP@:6YT*3L-"B`@("!I;G0@:6YT97)N86Q297-E<G9E9$9R86-":71S.PT*
M("`@(&EN="!F<F%C36%S:SL-"B`@("`-"B`@("`O+R!5<V5D('=H96X at 9&]I
M;F<@9FEX960@<&]I;G0 at 8V]N=F5R<VEO;G,@=VET:"!A(&-E<G1A:6X@;G5M
M8F5R(&]F(&)I=',@<F5M86EN:6YG#0H@("`@+R\@9F]R('1H92!F<F%C=&EO
M;F%L('!A<G0L(&%S(&]P<&]S960@=&\@=&AE('!U<F4@:6YT96=E<B!T<G5N
M8V%T:6]N#0H@("`@9&]U8FQE(&9P1&5N;W)M86QI>F5R.PT*#0H@("`@+R\@
M0V]M<'5T960@<F]U;F1I;F<@8V]M<&5N<V%T;W(@8F%S960@;VX@=&AE(&YU
M;6)E<B!O9B!B:71S(')E<V5R=F5D(&9O<@T*("`@("\O(&9R86-T:6]N86P@
M<F5P<F5S96YT871I;VX-"B`@("!D;W5B;&4 at 9FEX4F]U;F0[#0H@("`@9&]U
M8FQE(&)A<F5?=&EM93L-"B`@("!D;W5B;&4 at 8V%S=%]T:6UE.PT*("`@(&1O
M=6)L92!C;VYV97)T7W1I;64[#0H@("`@9&]U8FQE('%U:6-K=')U;F-?=&EM
?93L-"B\O1518#0H@('T[#0H@("`@#0HC96YD:68-"@==
`
end



More information about the vtk-developers mailing list