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
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.
5498ecd35 Properly handle global (whole mesh) fields in data set filters
f8fd0ce31 Silence warning about cast losing precision
3c4e8a2ea Convert filters to use precompiled field map functions where applicable
98f20ec26 Use a worklet to permute fields rather than ArrayHandlePermutation
4a5dbb65d Convert CleanGrid (and dependents) to use precompiled field map
2383a7fff Add MapFieldPermutation function
b1f288aae Add non-templated base class to Keys class.
934732bb6 Add MapFieldPermutation function
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1954
When VTK compiles VTK-m for inclusion as an accelerator library, it sets
an option to compile filters and other components for a different (and
expanded) set of common types. We should test this configuration.
Generally, fields that have a WHOLE_MESH association might be valid even
if the structure of the mesh changes. Thus, it makes sense for filters
to pass this data pretty much all the time.
Also cleaned up some code and comments to make the relationship between
`MapFieldOntoOutput` and `DoMapField` more clear.
When using math operators on small integers, the numbers are promoted to
32-bit ints. If that is set back to the same type, then some compilers
give a warning. This is annoying and pointless when dealing with
templated types, but we have to deal with it.
According to talks with Rob Maynard, using a worklet should be
(counterintuitively) faster than using ArrayHandlePermutation with
ArrayCopy.
This change also gives an opportunity to handle invalid indices, which
may be intentionally set when no mapping is available for that value.
For this case, MapFieldPermutation now takes an invalidValue argument to
set such values.
This function is compiled into the vtkm_filter library, so all filters
can implement this type of mapping without providing their own version
of compiling it.
Because we only compile it once, we provide more types to convert.
Hopefully the total compile time balances out.
The only reason Keys has a template is so that it can hold a UniqueKeys
array and provide the key for each group. If that is not needed and you
want to implement a library function that takes a keys object, you can
now grab the Keys superclass KeysBase. KeysBase is not templated, so you
can pass it to a standard method in a library.
This function is compiled into the vtkm_filter library, so all filters
can implement this type of mapping without providing their own version
of compiling it.
Because we only compile it once, we provide more types to convert.
Hopefully the total compile time balances out.
-- Setting the Spatial and OK bit both to 1 for Euler integrator
similar to RK4
-- After discussion w/ Dave, the Spatial/Temporal bit will be the
status of the particle and not the OK bit.
544a078cd Remove use of deprecated policies in examples
06f5119c2 Fix deprecation warning
f29a4712b Correct field types for ComputeMoments filter
a20ec03d0 Disable proxies in filter benchmark
72cd0107e Deprecate Execute with policy
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !2093
10dc96cb8 Remove extra count variable
536249f63 Merge remote-tracking branch 'upstream/master' into lagrangian_bugfix
519844782 Fix order of initialized seeds to match output format
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Matt Larsen <larsen30@llnl.gov>
Merge-request: !2084
This means that the filters in the examples will no longer properly
support the policies handed to them, but that is the direction we are
headed as the policies are now deprecated.
05fcda6c7 Compile IO library with device compilers
dce576bd1 Add BOVDataSetReader implementation to vtkm_io
8657a9b3c Update VTKDataSetWriter to compile into vtkm_io
086439e71 Update variants of VTKDataSetReaders to compile into vtkm_io
0612be9c5 Move VTKDataSetReaderBase code to vtkm_io
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Sujin Philip <sujin.philip@kitware.com>
Merge-request: !2100
The header was previously not marked inline and therefore
you could only have a single instance of the filter compiled
in a dynamic library / executable
Because the IO classes use ArrayHandle, they have to be compiled with
device compilers (even though they do not directly produce any device
code). This is a dumb requirement, but it is a requirement nonetheless.
Most of this code is not templated methods. Rather, it implements over
several types to call templated functions, which creates quite a bit of
code. Rather than have all code using a reader recompile the code, just
compile it once and put it in a library.
There have been several new features that were merged without
appropriate documentation in the changelogs. This adds some
new changelogs for some of these new features.
af5d363f4 Update sccache to latest master which now has full nvcc support
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Allison Vacanti <alliepiper16@gmail.com>
Merge-request: !2096
This filter is designed to work on vectors of many sizes. It was written
when selecting field types was the responsibility of the policy. It is
now the responsibility of the filter to specify possible field types.
This change is required to compile the MomentInvariants module for VTK
without policies.
This is going to increase the compile time for the filter benchmark, but
the overall goal is to move this code into libraries. When that happens,
the benchmark will not have to compile any of the filter code and should
ultimately go much faster.
The version of `Filter::Execute` that takes a policy as an argument is now
deprecated. Filters are now able to specify their own fields and types,
which is often why you want to customize the policy for an execution. The
other reason is that you are compiling VTK-m into some other source that
uses a particular types of storage. However, there is now a mechanism in
the CMake configuration to allow you to provide a header that customizes
the "default" types used in filters. This is a much more convenient way to
compile filters for specific types.
One thing that filters were not able to do was to customize what cell sets
they allowed using. This allows filters to self-select what types of cell
sets they support (beyond simply just structured or unstructured). To
support this, the lists `SupportedCellSets`, `SupportedStructuredCellSets`,
and `SupportedUnstructuredCellSets` have been added to `Filter`. When you
apply a policy to a cell set, you now have to also provide the filter.
9aa350ee3 Fix bad whitespace.
9991179e6 Do not use auto return type; it's not supported until C++14.
f1ee3f51f Merge branch 'master' into deprecate_read_portal_get
947104148 Merge branch 'master' into deprecate_read_portal_get
d961c185a Deprecate ReadPortal().Get pattern.
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Allison Vacanti <alliepiper16@gmail.com>
Merge-request: !2085
These are caused when using 32-bit Id's. Although there are some
benchmarks that test for this, some code in benchmarking and examples is
not covered by them.