Manta Interactive Ray Tracer Development Mailing List

Text archives Help


Re: [MANTA] SSE performance


Chronological Thread 
  • From: Aaron Knoll <knolla@cs.utah.edu>
  • To: Solomon Boulos <boulos@cs.utah.edu>
  • Cc: manta@sci.utah.edu
  • Subject: Re: [MANTA] SSE performance
  • Date: Mon, 17 Jul 2006 16:20:35 -0600

Hey Solomon,

(the BVH is already in Manta but not the interval
arithmetic culling aspect)

But the DynBVH code in Manta is non-SSE. What puzzles me is that, for some reason, SSE code similar to the BVH (my experiment with implicit octree traversal) performed at 1/4 the speed of single-ray octree code. Granted, I was doing a lot wrong there; but I smell something fishy in using the Manta RayPacket for traversal. Then, even the SSE code based on the frustum-octree (which performed decently for small scenes in DynRT) performed worse than single-ray.

For my RT06 submission I worked out all
the details for building general bounding planes around packets (no
restriction to square packets and such) so doing that quickly in SSE and
such might be a good start.

Yeah that's true; in fact there's code to do something similar for shadow rays in the DynRT-grid.

t'd be nice to make sure that the intersection pipeline
in Manta is up to snuff (I believe Steve's optimizations only went as far
as ray generation and framebuffer writes).

I haven't used any of the SSE triangle code in Manta. I'm just wondering why, using the same SSE traversal, Manta performed so much worse for my code than DynRT. It could have been my code; but I suspect something in RayPacket.

I'll try to port back to Manta when I have my packet/SSE code fully working in DynRT.

Thanks for that feedback,

-Aaron

On Jul 17, 2006, at 4:03 PM, Solomon Boulos wrote:

Speaking for the BVH, I would like to claim that it is not only not
well-tested but known to work poorly in some cases (if Ingo is around ask
him about +- Z axis on Thai statue, I believe it's +- X for Buddha).

As far as Manta's SSE performance, Manta has (due to Steve) the same
performance as DynRT and DynBVH for generating rays and storing the
results of tracing for large 1 spp images.  As far as stuff like
acceleration structures go though, this is where Steve got to before he
had to go back to other work (if I recall correctly).

So other than the need to port the DynRT grid and BVH code into the Manta
framework of Groups (the BVH is already in Manta but not the interval
arithmetic culling aspect) and subpackets there is basically not that much
work to do (it would be a good idea to extend the RayPacket to support the
functionality necessary to build bounding planes or intervals for the
necessary culling algorithms). For my RT06 submission I worked out all
the details for building general bounding planes around packets (no
restriction to square packets and such) so doing that quickly in SSE and
such might be a good start.

Like I said though, even before using bounding planes for the Grid and for
triangle culling, it'd be nice to make sure that the intersection pipeline
in Manta is up to snuff (I believe Steve's optimizations only went as far
as ray generation and framebuffer writes). This shouldn't be difficult
and a basic implementation of Ingo's triangle test already exists in
Models/Primitives/WaldTriangle which should hopefully perform at roughly
the same level as similar code in DynRT (I also created a simple perftest
scene or something like that that just has a couple triangles in it to
test exactly this case).

On Mon, 17 Jul 2006, Aaron Knoll wrote:

Hi everyone (especially James and Steve) -

Thiago and I were talking a bit about Manta. Ideally, we'd like to port the
DynRT grid code to Manta and use that as a permanent framework for our
research.

Unfortunately, Manta has a ways to go before that works. Back in June I was
experimenting with the SSE frustum/octree code in Manta, and it generally
performed about 1/5th the speed it did under icc and linux. I spent a good
week trying to get the SSE code performing before I gave up.

I'm not sure where the problem is; I suspect alignment in RayPacket could be
the culprit but I'm not positive. There are other issues; for example we
really need a way of generating packets of square tiles, and quickly
determining corner rays for frusta traversal.

Could someone (maybe James?) devote some time to fully porting the DynRT
RayPacket and renderer code into Manta? At this point, the DynRT grid and BVH
are well-tested and known to work fast. Once that is in there, and performing
on par with DynRT, then we'd have no problem abandoning DynRT and merging into
Manta.

Hope this request isn't too forward; really I want to work on Manta as much as
possible but I'd prefer not to spend a lot of time troubleshooting SSE
architectural issues as long as DynRT is working and Chuck's trying to squeeze
research out of me :)

-Aaron







Archive powered by MHonArc 2.6.16.

Top of page