Commit Graph

30 Commits

Author SHA1 Message Date
Vicente Adolfo Bolea Sanchez
b22823a547 Contour: Zero-init arrays in Flying Edges
- It fixes a lingering error triggered with BenchContour
- It reenables BenchContour

Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2020-10-21 19:12:51 -04:00
nadavi
18263a37ac update float casting to not have warnings on iris 2020-09-08 17:47:53 +00:00
Kitware Robot
cf0cdcf7d1 clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
Kenneth Moreland
d1a4aecc59 Improvements to moving data into ArrayHandle
We have made several improvements to adding data into an `ArrayHandle`.

## Moving data from an `std::vector`

For numerous reasons, it is convenient to define data in a `std::vector`
and then wrap that into an `ArrayHandle`. It is often the case that an
`std::vector` is filled and then becomes unused once it is converted to an
`ArrayHandle`. In this case, what we really want is to pass the data off to
the `ArrayHandle` so that the `ArrayHandle` is now managing the data and
not the `std::vector`.

C++11 has a mechanism to do this: move semantics. You can now pass
variables to functions as an "rvalue" (right-hand value). When something is
passed as an rvalue, it can pull state out of that variable and move it
somewhere else. `std::vector` implements this movement so that an rvalue
can be moved to another `std::vector` without actually copying the data.
`make_ArrayHandle` now also takes advantage of this feature to move rvalue
`std::vector`s.

There is a special form of `make_ArrayHandle` named `make_ArrayHandleMove`
that takes an rvalue. There is also a special overload of
`make_ArrayHandle` itself that handles an rvalue `vector`. (However, using
the explicit move version is better if you want to make sure the data is
actually moved.)

## Make `ArrayHandle` from initalizer list

A common use case for using `std::vector` (particularly in our unit tests)
is to quickly add an initalizer list into an `ArrayHandle`. Now you can
by simply passing an initializer list to `make_ArrayHandle`.

## Deprecated `make_ArrayHandle` with default shallow copy

For historical reasons, passing an `std::vector` or a pointer to
`make_ArrayHandle` does a shallow copy (i.e. `CopyFlag` defaults to `Off`).
Although more efficient, this mode is inherintly unsafe, and making it the
default is asking for trouble.

To combat this, calling `make_ArrayHandle` without a copy flag is
deprecated. In this way, if you wish to do the faster but more unsafe
creation of an `ArrayHandle` you should explicitly express that.

This requried quite a few changes through the VTK-m source (particularly in
the tests).

## Similar changes to `Field`

`vtkm::cont::Field` has a `make_Field` helper function that is similar to
`make_ArrayHandle`. It also features the ability to create fields from
`std::vector`s and C arrays. It also likewise had the same unsafe behavior
by default of not copying from the source of the arrays.

That behavior has similarly been depreciated. You now have to specify a
copy flag.

The ability to construct a `Field` from an initializer list of values has
also been added.
2020-07-23 10:53:38 -06:00
Li-Ta Lo
f333182476 Reverse Invoker, Dispatcher and Worklet dependency 2020-07-21 17:25:43 -06:00
Robert Maynard
16e04db157 FlyingEdges: Handle when pass 1 generates no intersections
Previously if pass 1 generated no intersections, pass 2 would
incorrectly generate no intersections resulting in an empty
dataset.
2020-06-11 08:32:28 -04:00
Robert Maynard
8ebea33c7e FlyingEdges: Handle when a dimensions size is <= 3
Previously if any axis <= 3, we would incorrectly generate
triangles on the boundary.
2020-06-10 12:33:03 -04:00
Robert Maynard
748f8f8c30 Correct flying edge cell-id mapping 2020-06-08 10:01:04 -04:00
Robert Maynard
251bd82b80 Significantly improve FlyingEdges performance across all devices
We now use SumYAxis when executing with CUDA for better memory patterns.
Instead of using the heavy Pass4/Pass4WithNormals, CUDA now uses a
2 pass approach with the second pass outputting the normals and
coordinates using with significantly less warp divergence
2020-05-22 15:53:49 -04:00
Robert Maynard
fa93738010 Rework FlyingEdges::Pass1 to handle NUMA and CUDA requirements.
First the Pass1 now uses WorkletVisitPointsWithCells as it is
faster since it doesn't compute some implicit boundary / neighborhood
info.

Second we reworked the logic around using `Fill` and a conditional
write of the edge case. The requirements of SMP when on a NUMA
machine is the complete opposite of what works great with CUDA.
2020-05-22 14:58:38 -04:00
Robert Maynard
769a10b47b FlyingEdge Normal and Point generation occurs in Pass4
By doing this in pass 4 we can remove numerous boundary condition
checks, improving the algorithm performance
2020-05-22 14:58:38 -04:00
Li-Ta Lo
52f0d5b2d5 Fix MarchingCell for Wedge
Fixed error in one entry of number_of_triangles table for MarchineCells that results in missing triangles for wedge cell type as reported by issue #496.
2020-05-04 15:32:41 -06:00
Robert Maynard
2434254218 Flying Edges now works with multiple contours 2020-04-14 09:21:27 -04:00
Robert Maynard
e1ccaced3e Merge topic 'add_flying_edges'
91c56d680 Update Contour tests to be aware of flying edge output
1b256281f Convert contour worklet to expect isovalues to a std::vector
c2bab6c6b Introduce FlyingEdges for 3d structured datasets
1995e5204 Correct minor issues from refactoring MarchingCells worklets
d3512879d Remove unneeded template parameters from Gradient.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !2005
2020-03-25 16:53:21 -04:00
Robert Maynard
1b256281f4 Convert contour worklet to expect isovalues to a std::vector
This reduces an ugly component of the Contour API
2020-03-25 08:23:10 -04:00
Robert Maynard
c2bab6c6bb Introduce FlyingEdges for 3d structured datasets 2020-03-25 08:23:10 -04:00
Kenneth Moreland
4f9fa08fa1 Remove ArrayHandleStreaming capabilities
The `ArrayHandleStreaming` class stems from an old research project
experimenting with bringing data from an `ArrayHandle` in parts and
overlapping device transfer and execution. It works, but only in very
limited contexts. Thus, it is not actually used today. Plus, the feature
requires global indexing to be permutated throughout the worklet
dispatching classes of VTK-m for no further reason.

Because it is not really used, there are other more promising approaches
on the horizon, and it makes further scheduling improvements difficult,
we are removing this functionality.
2020-03-24 15:01:56 -06:00
Robert Maynard
1995e52047 Correct minor issues from refactoring MarchingCells worklets 2020-03-22 12:49:58 -04:00
Robert Maynard
d3512879d1 Remove unneeded template parameters from Gradient. 2020-03-22 12:49:58 -04:00
Robert Maynard
fd30525421 Restructure Contour algorithm to make it easier to add specialized versions 2020-02-27 16:08:00 -05:00
Kenneth Moreland
ad0a53af71 Convert execution preparation to use tokens
Marked the old versions of PrepareFor* that do not use tokens as
deprecated and moved all of the code to use the new versions that
require a token. This makes the scope of the execution object more
explicit so that it will be kept while in use and can potentially be
reclaimed afterward.
2020-02-25 09:39:19 -07:00
Li-Ta Lo
d1fe1c3f38 rename MarchingCubes to Contour 2019-08-17 19:10:57 -06:00
Li-Ta Lo
fea2ccac2b removed old lookup table, rename new tables into CoontourTables 2019-08-17 18:46:59 -06:00
Li-Ta Lo
52d1ec8467 add Wedge and Pyramid support, visually verified with clipped Tangle field 2019-08-17 18:12:11 -06:00
Li-Ta Lo
1efdffb1b3 minor bug fix in edge table, visually verify that both Hex and Tetra works 2019-08-17 14:08:28 -06:00
Li-Ta Lo
fda22df5b7 commit before merge with master 2019-08-17 13:29:43 -06:00
Li-Ta Lo
7ded276fa6 table driven triangle generation 2019-08-17 11:37:14 -06:00
Li-Ta Lo
4e8e250705 new uniform table driven cell classifier 2019-08-15 22:37:52 -06:00
nadavi
fbcea82e78 conslidate the license statement 2019-04-17 10:57:13 -06:00
Robert Maynard
1147edb192 MarchingCubes now uses Gradient fast paths when possible.
When running on image data we now use central differences to compute the point
gradient
2017-09-25 14:25:28 -04:00