Commit Graph

2520 Commits

Author SHA1 Message Date
dpugmire
9bf49101ca Merge branch 'master' of https://gitlab.kitware.com/vtk/vtk-m into mpiStreamlines2 2020-08-17 16:35:40 -04:00
Kenneth Moreland
38a6fe22f8 Merge topic 'arraycopy-with-buffer'
8983154e9 Add DeepCopy to ArrayHandle
694ba7e92 Change ArrayCopy to deep copy Buffer objects where possible

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2212
2020-08-14 15:48:51 -04:00
Sujin Philip
0beb0f650b Merge topic 'add-kokkos-backend'
2d1b609b3 Use Ubuntu instead of rhel8 for cuda+kokkos
769248583 Make sure we use c++14 when using CUDA 11+
64efa6401 Kokkos: make sure we don't pass multiple rdc flags
b2f4c8e5e Switch -O3 to -O2 on Linux with Cuda 10
db57ed26a Fix warnings
452f61e29 Add Kokkos backend

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2164
2020-08-14 09:35:46 -04:00
Kenneth Moreland
8983154e9e Add DeepCopy to ArrayHandle
`ArrayHandle::DeepCopy` creates a new `ArrayHandle` of the same type and
deep copies the data into it.

This functionality is similar to `ArrayCopy`. However, it can be used
without having to compile for the device on which the copy happens.
2020-08-13 16:56:06 -06:00
Kenneth Moreland
694ba7e92c Change ArrayCopy to deep copy Buffer objects where possible
Now that the data in an `ArrayHandle` is stored in `Buffer` objects, we
now have a more efficient way of doing deep copies of memory. Rather
than call `Algorithm::Copy`, which iterates over the array and copies
each item, `ArrayCopy` now uses the `Buffer` interface to do direct
device-to-device (or host-to-host) mem copies. This should be more
efficent and take less time to compile.

Note that this direct `Buffer` copy only works if the two `ArrayHandle`s
are of the same type. If they are different, `ArrayCopy` still has to
fall back to using `Algorithm::Copy`.

Also note that not all `ArrayHandle`s are using the new `ArrayHandle`
interface (and therefore not using `Buffer` objects). Thus, a fallback
is still available for old `ArrayHandle` types.
2020-08-13 16:56:06 -06:00
dpugmire
c806403e2a distributed memory support for streamline and particleadvect filters. 2020-08-13 09:53:57 -04:00
Kenneth Moreland
6dbf304000 Merge topic 'num-buffers-runtime-selectable'
72475177d Make number of buffers in an ArrayHandle runtime selectable

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2206
2020-08-12 18:23:59 -04:00
Sujin Philip
db57ed26a2 Fix warnings 2020-08-12 13:55:24 -04:00
Sujin Philip
452f61e290 Add Kokkos backend 2020-08-12 13:55:24 -04:00
Robert Maynard
477d225415 Always have VTK-m tests enable vtkmdiy mpi environment 2020-08-11 17:02:19 -04:00
Kenneth Moreland
72475177d8 Make number of buffers in an ArrayHandle runtime selectable
This has no real change in the operation, but it will simplify code as
we convert `ArrayHandle`s to the new type. We will be able to write
simple runtime code rather than complex metaprogramming to determine the
number of buffers to use.
2020-08-11 13:25:06 -06:00
Robert Maynard
f22dd9f571 Allow VTK-m Buffer to have ownership transferred 2020-08-06 10:31:57 -04:00
Kenneth Moreland
5f541d2515 Drop log message when ignoring copy in move
For `make_ArrayHandle` and `make_Field` when it is determined that the
data can be safely moved, just silently move instead of copy instead of
printing a log message saying the copy flag will be ignored.

Also fix an issue with `make_ArrayHandle` when the data was not moved
when it could have been.
2020-07-23 17:59:50 -06:00
Kenneth Moreland
4c56797c5d Remove ArrayHandleSOA constructors with ambiguous move semantics
Also correct some constructors/functions that should be
deprecated.
2020-07-23 17:54:42 -06:00
Kenneth Moreland
0d484505e7 Fix bad gcc compiler warning about static definition (again) 2020-07-23 17:53:15 -06:00
Kenneth Moreland
e23989bde1 Use data method to get pointer from std::vector
Do not use `&v.front()` to get the pointer from an `std::vector`. That
behavior is undefined when the vector is empty. Instead, use `v.data()`.
2020-07-23 11:02:40 -06:00
Kenneth Moreland
2e243cbbac Fix issue with using std::string in ArrayHandle
The recent version of ArrayHandleBasic allocates typeless arrays without
any initialization. This can cause issues with types that require a
constructor. The UnitTestVariantArrayHandle was trying to create an
ArrayHandle with an std::string, and the uninitialized strings were
causing crashes on some platforms.
2020-07-23 11:02:38 -06:00
Kenneth Moreland
46f253b927 Fix compiler issue with MSVC 2020-07-23 10:53:42 -06: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
Kenneth Moreland
744edbf428 Merge topic 'gcc-static-function-warning'
b1f648bfd Remove gcc warning about static declared function

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2193
2020-07-22 15:20:45 -04:00
Li-Ta Lo
537557ef91 Merge topic 'worket_invoker_dispatcher2'
0dcc6cc16 reverse #include on CellNeighborhood
2489da125 restore comment, add needed #include
f33318247 Reverse Invoker, Dispatcher and Worklet dependency

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !2192
2020-07-22 14:20:35 -04:00
Kenneth Moreland
b1f648bfdf Remove gcc warning about static declared function
While compiling UnitTestVariantArrayHandle, some versions of gcc
(between 6 and 8, I think) gave a warning like the following:

```
../vtkm/cont/StorageVirtual.h:227:12: warning: 'vtkm::Id vtkm::cont::internal::detail::StorageVirtualImpl<T, S>::GetNumberOfValues() const [with T = std::__cxx11::basic_string<char>; S = vtkm::cont::StorageTagImplicit<{anonymous}::UnusualPortal<std::__cxx11::basic_string<char> > >]' declared 'static' but never defined [-Wunused-function]
```

This warning makes no sense because it is refering to a method that is
not declared static. (In fact, it overrides a virtual method.)

I believe this is an obscure bug in these versions of gcc. I found a
[stackoverflow post] that seems to have the same problem, but no
workaround was found.

The warning originated from code that had little effect. It was part of
a test with a custom ArrayHandle storage type that was already disabled
for other reasons. Just removed the code.

[stackoverflow post]: https://stackoverflow.com/questions/56615695/how-to-fix-declared-static-but-never-defined-on-member-function
2020-07-22 08:28:28 -06:00
Li-Ta Lo
f333182476 Reverse Invoker, Dispatcher and Worklet dependency 2020-07-21 17:25:43 -06:00
dpugmire
246be1b7f0 Merge branch 'master' of https://gitlab.kitware.com/vtk/vtk-m into generalizeField 2020-07-21 15:03:08 -04:00
Li-Ta Lo
567b1fedd2 Merge topic 'cell_neighbor'
9cd70a7dc Install WorkletNeighborhood.h
f66c782b1 Extract WorkletNeighborhood base class
760c51ed6 install ThreadIndicesNeighborhood.h
e52b8fa88 Add CellNeighborhood

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !2181
2020-07-21 13:45:40 -04:00
dpugmire
31c97bed89 Generalize fields for particle advection 2020-07-20 21:15:46 -04:00
Kenneth Moreland
502c310cf8 Merge topic 'deprecate-arrayhandlevirtualcoordinates'
c689a68c5 Suppress bad deprecation warnings in MSVC
a3f23a03b Do not cast to ArrayHandleVirtual in VariantArrayHandle::CastAndCall
f6b13df51 Support coordinates of both float32 and float64
453e31404 Deprecate ArrayHandleVirtualCoordinates
be7f06bbe CoordinateSystem data is VariantArrayHandle

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2177
2020-07-16 17:25:43 -04:00
Li-Ta Lo
e52b8fa88a Add CellNeighborhood 2020-07-15 14:41:32 -06:00
Kenneth Moreland
c689a68c5c Suppress bad deprecation warnings in MSVC
The Microsoft compiler has this annoying and stupid behavior where if
you have a generic templated method/function and that method is
instantiated with a deprecated class, then the compiler will issue a
C4996 warning even if the calling code is suppressing that warning
(because, for example, you are implementing other deprecated code and
the use is correct). There is no way around this other than suppressing
the warnings for all uses of the templated method.
2020-07-14 16:25:04 -06:00
Kenneth Moreland
a3f23a03b6 Do not cast to ArrayHandleVirtual in VariantArrayHandle::CastAndCall
We are moving to deprecate `ArrayHandleVirtual`, so we are removing the
feature where `VariantArrayHandle::CastAndCall` automatically casts to
an `ArrayHandleVirtual` if possible.

The big reason to make this change now (as opposed to later when
`ArrayHandleVirtual` is deprecated) is to improve compile times.
This prevents us from having to compile an extra code path using
`ArrayHandleVirtual`.
2020-07-14 08:53:03 -06:00
Kenneth Moreland
f6b13df513 Support coordinates of both float32 and float64
Previously there were issues if the coordinate system was using floating
point values that were not FloatDefault. This remedies that issue.
2020-07-14 08:53:01 -06:00
Kenneth Moreland
453e314044 Deprecate ArrayHandleVirtualCoordinates
We are in the process of deprecating virtual classes in VTK-m
(that run in the execution environment).
2020-07-14 08:51:47 -06:00
Kenneth Moreland
be7f06bbe7 CoordinateSystem data is VariantArrayHandle
`CoordinateSystem` differed from `Field` in that its `GetData`
method returned an `ArrayHandleVirtualCoordinates` instead of
a `VariantArrayHandle`. This is probably confusing since
`CoordianteSystem` inherits `Field` and has a pretty dramatic
difference in this behavior.

In preparation to deprecate `ArrayHandleVirtualCoordinates`, this
changes `CoordiantSystem` to be much more like `Field`. (In the
future, we may change the `CoordinateSystem` to point to a `Field`
rather than be a special `Field`.)

A method named `GetDataAsMultiplexer` has been added to
`CoordinateSystem`. This method allows you to get data from
`CoordinateSystem` as a single array type without worrying
about creating functors to handle different types and without
needing virtual methods.
2020-07-14 08:50:39 -06:00
Robert Maynard
29bac212c7 Merge topic 'extrude-fix'
a428d75e0 adding CellSetExtrude to DefaultTypesVTK
235d9ce14 add GetThreadIndex to ThreadIndicesExtrude classes

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2172
2020-07-13 14:24:58 -04:00
Kenneth Moreland
85bdc030ba Merge topic 'fix-multiplexer-cuda'
18b5be92d Fix issue with CUDA and ArrayHandleMultiplexer

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !2168
2020-07-09 08:25:55 -04:00
Caitlin Ross
a428d75e02 adding CellSetExtrude to DefaultTypesVTK 2020-07-08 14:51:41 -04:00
Kenneth Moreland
cbf9868915 Fix potential deadlock in ArrayHandle::PrepareForOutput
`ArrayHandle::PrepareForOutput` often has to reallocate the array to the
specified size. Previously, this allocation was not happening with the
`Token` that is passed to `PrepareForOutput`. If the `ArrayHandle` is
already attached or enqueued for that `Token`, then the allocation would
deadlock.

You can now pass a `Token` object to `Allocate`, which is what
`PrepareForOutput` does.
2020-07-07 18:30:38 -06:00
Kenneth Moreland
18b5be92d6 Fix issue with CUDA and ArrayHandleMultiplexer
When you try to call the `Reduce` operation in the CUDA device adapter
with a sufficently complex interator type, you get a compile error
that says `error: cannot pass an argument with a user-provided
copy-constructor to a device-side kernel launch`.

This appears to be a bug in either nvcc or Thrust. I believe it is
related to the following reported issues:

* https://github.com/thrust/thrust/issues/928
* https://github.com/thrust/thrust/issues/1044

Work around this problem by making a special condition for calling
`Reduce` with an `ArrayHandleMultiplexer` that calls the generic
algorithm in `DeviceAdapterAlgorithmGeneral` instead of the algorithm in
Thrust.
2020-07-06 13:51:36 -06:00
Kenneth Moreland
42219f8d61 Fix buffer leak in BufferInfo 2020-06-29 16:36:21 -06:00
Kenneth Moreland
a47fd42bc1 Pin user provided memory in ArrayHandle
Often when a user gives memory to an `ArrayHandle`, she wants data to be
written into the memory given to be used elsewhere. Previously, the
`Buffer` objects would delete the given buffer as soon as a write buffer
was created elsewhere. That was a problem if a user wants VTK-m to write
results right into a given buffer.

Instead, when a user provides memory, "pin" that memory so that the
`ArrayHandle` never deletes it.
2020-06-25 14:02:46 -06:00
Kenneth Moreland
56bec1dd7b Replace basic ArrayHandle implementation to use Buffers
This encapsulates a lot of the required memory management into the
Buffer object and related code.

Many now unneeded classes were deleted.
2020-06-25 14:02:26 -06:00
Kenneth Moreland
8f7b0d18be Add Buffer class
The buffer class encapsulates the movement of raw C arrays between
host and devices.

The `Buffer` class itself is not associated with any device. Instead,
`Buffer` is used in conjunction with a new templated class named
`DeviceAdapterMemoryManager` that can allocate data on a given
device and transfer data as necessary. `DeviceAdapterMemoryManager`
will eventually replace the more complicated device adapter classes
that manage data on a device.

The code in `DeviceAdapterMemoryManager` is actually enclosed in
virtual methods. This allows us to limit the number of classes that
need to be compiled for a device. Rather, the implementation of
`DeviceAdapterMemoryManager` is compiled once with whatever compiler
is necessary, and then the `RuntimeDeviceInformation` is used to
get the correct object instance.
2020-06-25 14:01:39 -06:00
Li-Ta Lo
365b1bb25c use make_ArrayHandleZip 2020-06-25 09:51:06 -06:00
Li-Ta Lo
980c4864ac Merge branch 'master' into standard_normal 2020-06-24 14:38:50 -06:00
Li-Ta Lo
beba90b6f7 Merge topic 'uniform_real'
143e3d39a remove unused type alias
01a448663 Merge branch 'master' into uniform_real
c67e5bb12 fixe warnings about implicit type conversion
1e4294392 Add deterministic seed to avoid potential spurious failure
5b0e309b9 the random source is still 64 bits
cc3061bab Avoid calling ReadPortal() all the time
9bf6dea22 remove inline initialization of seed
e69308047 Add statistics base testing, add Flot32 RNG

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !2148
2020-06-24 16:36:36 -04:00
Kenneth Moreland
f6a8993469 Make tests that throw an STL exception fail
If a test throws any unexpected exception, the test is supposed to
detect that and fail. For the STL exceptions, the test failed to return
an error code. Fix that.
2020-06-23 16:25:09 -06:00
dpugmire
0654d1853d fix cuda compile, export function. 2020-06-19 10:57:30 -04:00
dpugmire
6d1930bc20 forgot the storage tags 2020-06-18 19:41:37 -04:00
dpugmire
03e3198977 move funcs to cxx, remove storage template 2020-06-18 19:37:09 -04:00
dpugmire
bac9664104 Move array copy to cxx 2020-06-18 17:53:19 -04:00
dpugmire
35ed68911e fix compile error. 2020-06-18 15:59:09 -04:00
dpugmire
1a7823c604 code cleanup. 2020-06-18 15:50:25 -04:00
dpugmire
02d8c3782d Add unittest for particlearraycopy 2020-06-18 15:45:36 -04:00
dpugmire
24451a3de2 Create a function for copying fields from particle arrays. 2020-06-18 14:54:18 -04:00
Li-Ta Lo
01a4486638 Merge branch 'master' into uniform_real 2020-06-18 11:46:18 -06:00
Li-Ta Lo
2aea7534bd Add ArrayHandleRandomStandardNormal 2020-06-17 15:48:09 -06:00
Kenneth Moreland
8a1df977a7 Add common superclass to VariantArrayHandleBase
Many of the operations of `VariantArrayHandleBase` are not dependent on
the TypeList parameter of the class. Still others can operate just as
well by providing a type list to a method. Thus, it is convenient to
create a superclass that is not templated. That allows us to pass around
a `VariantArrayHandle` when the type list does not matter.

This superclass is called `VariantArrayHandleCommon` because "base" was
already taken.
2020-06-17 15:38:20 -06:00
Kenneth Moreland
c35abc732f Rename IsInValidArrayHandle to IsInvalidArrayHandle
This makes it clear that it returns true for an invalid array handle.
The previous name implied that it was looking for an ArrayHandle in some
"valid" set, which is the opposite.
2020-06-17 15:38:19 -06:00
Li-Ta Lo
1e42943928 Add deterministic seed to avoid potential spurious failure 2020-06-17 13:36:15 -06:00
Li-Ta Lo
5b0e309b95 the random source is still 64 bits 2020-06-17 12:58:03 -06:00
Li-Ta Lo
cc3061bab1 Avoid calling ReadPortal() all the time 2020-06-17 12:53:11 -06:00
Li-Ta Lo
9bf6dea226 remove inline initialization of seed 2020-06-17 12:47:54 -06:00
Li-Ta Lo
e69308047b Add statistics base testing, add Flot32 RNG 2020-06-17 12:01:10 -06:00
Kenneth Moreland
f8a09d6de5 Handle read-only portals in ArrayHandleMultiplexer
The ArrayPortalMultiplexer always called Set on the delegate portals.
However, sometimes the portals were not supported. Instead, only call
when the delegate is supported.

Probably the "right" thing to do would be to check all posible portals
for support, but that sounds like it would slow down the compile.
2020-06-16 00:15:11 -06:00
Kenneth Moreland
ed2f4aabf7 Detect when VariantArrayHandle::AsMultiplexer fails
Previously, the VariantArrayHandle::AsMultiplexer operation silently
failed and returned an invalid ArrayHandleMultiplexer. This is now
changed to throw an exception if the desired ArrayHandleMultiplexer
cannot hold the VariantArrayHandle's array.
2020-06-16 00:12:24 -06:00
NAThompson
b3cb8e834c Nuke the ostream overload. 2020-06-12 16:07:16 -04:00
NAThompson
b55ce7369e Demangle symbols in PrintSummary. 2020-06-12 15:23:16 -04:00
Kenneth Moreland
22f227a91e Merge topic 'ordered-async-access'
de3bda373 Use deque instead of list for ArrayHandle queue
498d44548 Pass Token::Reference by value
c32c9e8e8 Fix deadlock when changing device during read
99e14ab8a Add proper enqueuing of Tokens for ArrayHandle

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2130
2020-06-11 21:55:27 -04:00
Kenneth Moreland
de3bda3738 Use deque instead of list for ArrayHandle queue 2020-06-11 15:47:41 -06:00
Kenneth Moreland
498d445483 Pass Token::Reference by value
There is no point in passing Token::Reference by reference since (being
just a simple reference itself) it is no larger than a pointer.
2020-06-11 11:51:42 -06:00
Li-Ta Lo
c04b8440eb Merge topic 'uniform_real'
c0dee7402 make it explicit that we are using 64-bit unsigned integer in bit op
34f350588 Added changelog
e9f584a91 ArrayHandleRandomUniformReal

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !2116
2020-06-11 08:41:38 -04:00
Sujin Philip
b7d0c94f1b Merge topic 'diy-mpi-nompi'
934f085e0 Build diy as a library
f0a37ac6a Merge branch 'upstream-diy' into diy-mpi-nompi
7687aabf8 diy 2020-06-05 (b62915aa)
6ca2b9f87 Point to new version of Diy

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !2123
2020-06-08 21:25:54 -04:00
Kenneth Moreland
c32c9e8e8d Fix deadlock when changing device during read
Because ArrayHandle currently only supports one device at a time, it is
possible that a `PrepareForInput` might actually need to wait for write
access so that it could move the data between devices. However, we don't
want the `Token` to be attached for writing because that could block
other read operations.

To get around this, add a hack to WaitToWrite to allow it to attach for
reading instead of writing.
2020-06-08 18:15:13 -06:00
Kenneth Moreland
99e14ab8a6 Add proper enqueuing of Tokens for ArrayHandle
An issue that was identified for the thread safety of `ArrayHandle` is
that if several threads are waiting to use an `ArrayHandle`, there might
be an expectation of the order in which the operations happen. For
example, if one thread is modifying the contents of an `ArrayHandle` and
another is reading those results, we would need the first one to start
before the second one.

To solve this, a queue is added to `ArrayHandle` such that when waiting
to read or write an `ArrayHandle` the `Token` has to be at the top of
the queue in addition to other requirements being met.

Additionally, an `Enqueue` method is added to add a `Token` to the queue
without blocking. This allows a control thread to queue the access and
then spawn a thread where the actual work will be done. As long as
everything is enqueued on the main thread, the operations will happen in
the expected order.
2020-06-08 16:49:02 -06:00
Sujin Philip
934f085e09 Build diy as a library
Support both mpi and nompi versions simultaneously.
2020-06-08 15:57:51 -05:00
Kenneth Moreland
7be44c847f Enable setting invalid value in probe filter
Initially, the probe filter would simply not set a value if a sample was
outside the input `DataSet`. This is not great as the memory could be
left uninitalized and lead to unpredictable results. The testing
compared these invalid results to 0, which seemed to work but is
probably unstable.

This was partially fixed by a previous change that consolidated to
mapping of cell data with a general routine that permuted data. However,
the fix did not extend to point data in the input, and it was not
possible to specify a particular invalid value.

This change specifically updates the probe filter so that invalid values
are set to a user-specified value.
2020-06-03 15:29:37 -06:00
Li-Ta Lo
c0dee74028 make it explicit that we are using 64-bit unsigned integer in bit op 2020-06-03 11:43:14 -06:00
Li-Ta Lo
e9f584a91f ArrayHandleRandomUniformReal
Add an ArrayHandle for generating random Float64 in the range of [0, 1).
2020-06-02 11:58:57 -06:00
Robert Maynard
a652f7fe1e Update vtk-m doxygen to generate less warnings 2020-06-01 16:58:32 -04:00
Robert Maynard
97a2408fc4 Correct warnings for using TBB 2020 deprecated functions 2020-06-01 16:58:32 -04:00
NAThompson
fe4f71ab92 Deprecate DataSetFieldAdd. 2020-05-27 15:27:47 -04:00
Robert Maynard
cf9b74d7ff Merge topic 'improve_flying_edge_perf'
251bd82b8 Significantly improve FlyingEdges performance across all devices
fa9373801 Rework FlyingEdges::Pass1 to handle NUMA and CUDA requirements.
769a10b47 FlyingEdge Normal and Point generation occurs in Pass4
93d87e06f Optimize StructuredPointGradient for non boundary points.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2080
2020-05-27 08:47:09 -04:00
Ben Boeckel
0488aab201 docs: update gitlab links to include /-/ component 2020-05-26 14:48:49 -04:00
Allison Vacanti
ac3fa0f252 Merge topic 'cuda_fixes'
6c98cbc6e Add missing Algorithm::Synchronize() in timer test.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2094
2020-05-25 19:18:16 -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
Kenneth Moreland
5498ecd35b Properly handle global (whole mesh) fields in data set filters
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.
2020-05-21 08:34:34 -06:00
Kenneth Moreland
b1f288aaea Add non-templated base class to Keys class.
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.
2020-05-21 08:34:07 -06:00
Kenneth Moreland
06f5119c29 Fix deprecation warning
This came up when updating VTK-m in VTK.
2020-05-18 18:41:47 -06:00
Kenneth Moreland
72cd0107ee Deprecate Execute with policy
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.
2020-05-18 12:38:41 -06:00
Allison Vacanti
6c98cbc6e4 Add missing Algorithm::Synchronize() in timer test. 2020-05-17 12:53:14 -04:00
Nick
9aa350ee3d Fix bad whitespace. 2020-05-14 18:13:03 -04:00
Nick
9991179e6d Do not use auto return type; it's not supported until C++14. 2020-05-14 18:10:32 -04:00
Nick
9471041484 Merge branch 'master' into deprecate_read_portal_get 2020-05-14 14:04:44 -04:00
Nickolas Davis
3a42ebf7bd Merge topic 'image-io'
24d022b02 Implement and test ImageReader and ImageWriter capabilities in the io library

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1967
2020-05-13 19:20:42 -04:00
nadavi
24d022b02b Implement and test ImageReader and ImageWriter capabilities in the io library 2020-05-13 16:10:21 -06:00
NAThompson
1f8e2db7b2 Remove unused variable from UnitTestTimer. 2020-05-13 13:00:40 -04:00
NAThompson
194c6f6b42 Attempt to make UnitTestTimer fail less often. 2020-05-13 12:31:25 -04:00
NAThompson
d961c185ac Deprecate ReadPortal().Get pattern. 2020-05-12 15:43:40 -04:00
Nick
afe9c2a2b0 Update UnitTestTimer.cxx 2020-05-08 15:00:02 -04:00
NAThompson
46faf574fa ReadPortal().Get(idx) is slow in a loop. 2020-05-08 11:30:59 -04:00
Kenneth Moreland
ddf038742d Use finite types when serializing fields
When serializing fields, you have to select what underlying data types
of the field you want to support serializing. With recent changes in the
default policy, attempts to serialize a field often resulted in trying
to use the `vtkm::ListUniversal` type list, which is infinite.
Obviously, this cannot be compiled.

Instead, when the `vtkm::ListUniversal` list is encountered, use
`vtkm::TypeListAll` instead.
2020-05-07 13:58:08 -06:00
Allison Vacanti
2d4d54b170 Remove Set method from const ArrayPortalFromIterators specialization...
...and add unit test.

Related to !2071, #502.
2020-05-05 13:55:54 -04:00
Vicente Adolfo Bolea Sanchez
3b55797d41 replaces Dataset fields vector to a map
This refactor aims to increase the performance of
AddField / Getfield at the expense of memory usage and
some bits of performances when only few fields are used

Moving to non-contiguous memory will impact cpu cache benefits,
however, since each of the Field has again another pointer to
its actual data, this benefits where actually just small.

Also the choice of map v.s. unordered_map is about the number of
elements, very likely few rehashing happenings from until <100

This will also reduce the memory fragmentation caused by vectors.

Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2020-05-01 14:05:03 -04:00
Kenneth Moreland
882dcacca4 Have filter specify its own field types
Previously, the policy specified which field types the filter should
operate on. The filter could remove some types, but it was not able to
add any types.

This is backward. Instead, the filter should specify what types its
supports and the policy may cull out some of those.
2020-04-28 10:31:44 -06:00
Vicente Adolfo Bolea Sanchez
d0396e2a40 relaxes ThreadIndicesType across multiple worklets fetchs
This change is needed for being able to use different thread indices types
without changing Fetchs. Basically decoupling those two areas.

1. This commit removes concrete specialization instantiations of
   ThreadIndicesTypes in all of the Fetch's specializations.

2. It also moves the ThreadIndicesType template parameter from the Fetch
   struct to a template parameter in their methods Load/Store.

Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2020-04-24 17:39:31 -04:00
Vicente Adolfo Bolea Sanchez
738c05ae87 fixes OMP reduction when using OMP_NUM_THREADS lt 4
This fixes, which where triggered since in the new CI, one of the
docker runner set `OMP_NUM_THREADS=3`:

1. `UnitTestOpenMPDeviceAdapter`
2. `UnitTestMeshQualityFilter`

In the redution optimized implementation for _OpenMP_, it unrolls
the reduce loop in iterations of four elements. The last iteration
in the loop might overflow the loop end element (when it is not a
multiple of four).

This commit fixes this by setting the OpenMP unrolled reduce loop
end element to its previous closest multiple of four of the original end
element.

Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2020-04-22 20:14:34 -04:00
Kenneth Moreland
94f0d2f8a5 Restore device tests
While debugging, I commented out a section of the device adapter tests
to narrow down on some issues. Oops, I forgot to restore the test. Do
that now.
2020-04-21 11:46:40 -06:00
Kenneth Moreland
6dc0b394a9 Fix reduce-by-key with a fancy output array
If you gave ReduceByKey a fancy output array that decorated another
array, you could get a runtime error for using an invalid array (if the
device adapter used the generic algorithm). The problem was that
ReduceByKey creates a temporary array, and that array was given the same
storage as the output array. That might not be valid for fancy arrays,
so instead use the default storage for the temporary array.
2020-04-16 14:19:44 -06:00
Kenneth Moreland
52f157e420 Fix scan-by-key with a fancy output array
If you gave ScanInclusiveByKey a fancy output array that decorated
another array, you would get a runtime error for using an invalid array.
The problem was that ScanInclusiveByKey creates a temporary output array
and then copies the result to the actual output array. The problem was
that the temporary output array was given the same storage as the output
array, which won't work if the output array is fancy. Instead, make the
storage for the temporary array default.
2020-04-16 10:37:48 -06:00
Vicente Adolfo Bolea Sanchez
64e35e6fbf removed doxygen warning at ArrayHandleRandomUniformBits 2020-04-02 11:49:24 -04:00
Robert Maynard
5061d43f5a vtkm_option should be used as it properly handles CMP0077
Without using vtkm_option, you will run into CMP0077 which
means "option() won't honor normal variables".
2020-04-01 08:52:07 -04:00
Kenneth Moreland
2016aa01d5 Fix unused parameter warnings
One of the dashboard compilers (gcc 4.8 with cuda, I think) was giving
warnings about an unused parameter. Apparently, the compiler did not
like the parameters defined for `default` assignment operators.
2020-03-30 14:45:40 -06:00
James
46d7d1865a Merge remote-tracking branch 'upstream/master' into Enhance-Testing-From-File 2020-03-27 11:33:18 -04:00
Robert Maynard
8810fc2fa6 Merge topic 'philox'
ef49a71aa Merge branch 'philox' of gitlab.kitware.com:ollielo/vtk-m into philox
563642400 remove outdated comments on type-punning
be7c18544 tried to supress warning about type punning
c795f74b2 Merge branch 'master' into philox
2b43fcb25 change function signature for work with MSVC
13e7ac362 Merge branch 'philox' of gitlab.kitware.com:ollielo/vtk-m into philox
1e2fd540d add Doxygen documentation
f2ea17917 add Doxygen documentation
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1990
2020-03-25 13:17:50 -04:00
Kenneth Moreland
545e60fbe3 Merge topic 'no-streaming-arrayhandle'
4f9fa08fa Remove ArrayHandleStreaming capabilities

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !2008
2020-03-25 11:26:26 -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
Kenneth Moreland
b54719b4e0 Merge topic 'modify-default-policy'
42bc9a393 Fix gaps in type support
dc112b516 Enable changing policy used for library compiles
76f870150 Type check input and output array arguments differently

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1997
2020-03-24 12:17:23 -04:00
Li-Ta Lo
563642400a remove outdated comments on type-punning 2020-03-24 09:49:48 -06:00
James
95ba497bb2 Merge remote-tracking branch 'upstream/master' into Enhance-Testing-From-File 2020-03-24 10:53:06 -04:00
Vicente Adolfo Bolea Sanchez
4797426e1f silenced doxygen unsupported c++ syntax
Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2020-03-23 19:55:46 -04:00
Li-Ta Lo
be7c185449 tried to supress warning about type punning 2020-03-23 15:03:57 -06:00
Li-Ta Lo
c795f74b24 Merge branch 'master' into philox 2020-03-23 08:28:02 -06:00
Kenneth Moreland
42bc9a393c Fix gaps in type support
With recent changes to allow a configuration to change the default
types, storage, and cell sets, it is possible to feed filters and other
components types they were not previously expecting. Fix feature gaps
where these components were not accepting the types they should.
2020-03-19 17:07:11 -06:00
Kenneth Moreland
dc112b5169 Enable changing policy used for library compiles
Previously, the PolicyDefault used to compile all the filters was hard-
coded. The problem was that if any external project that depends on VTK-
m needs a different policy, it had to recompile everything in its own
translation units with a custom policy.

This change allows an external project provide a simple header file that
changes the type lists used in the default policy. That allows VTK-m to
compile the filters exactly as specified by the external project.
2020-03-19 15:07:07 -06:00
Kenneth Moreland
76f870150b Type check input and output array arguments differently
Read-only arrays (usually) do not define Set methods. Thus, using one in
an Invoke argument that does output will result in compile errors. To
help avoid that, modify the type checks to differentiate input and
output arrays.
2020-03-19 15:07:01 -06:00
Li-Ta Lo
2b43fcb258 change function signature for work with MSVC 2020-03-19 14:24:38 -06:00
Li-Ta Lo
1e2fd540d1 add Doxygen documentation 2020-03-19 10:15:36 -06:00
Li-Ta Lo
7bcb3a0312 Rename unit tests as well 2020-03-18 16:50:32 -06:00
Li-Ta Lo
46813d4e90 Incorporating Ken's commnet
Rename class, directory and namespace names, remove convinience function.
2020-03-18 16:03:47 -06:00
Li-Ta Lo
0f6a96fc1b rename prng to random 2020-03-18 15:08:12 -06:00
Kenneth Moreland
783bc15ffd Do not rely on implict copy constructors when destructor defined
As a general C++ "rule of three," if one of a copy constructor, copy
assignment, or destructor is defined, all three should be defined. Some
compilers issue warnings if this rule of three is violated.

It is sometimes the case that we define a destructor simply because it
is only valid in the control environment. When doing so, add
implementations for copy constructor and assignment as well.
2020-03-18 14:53:14 -06:00
Li-Ta Lo
c7e57e2fe0 Mandatory/Default Seed
Force use to seed the RNG when instantiate ArrayHandlePhiloxURBG, default
to std::random_device when using make_ArrayHandlePhiloxURBG.
2020-03-18 14:36:09 -06:00
Kenneth Moreland
5a805b6dc9 Properly handle Get(Id3) in ArrayPortalCheck
Previously, the ArrayPortalCheck wrapper did not allow access to the
superclass' Get for 3D indices. This solves that problem and also fixes
it for Set (assuming there is ever an instance of that).
2020-03-18 10:51:20 -06:00
Kenneth Moreland
75a46dc2eb Remove tao tuple from third party libraries
We are no longer using this code. It has been replaced by vtkm::Tuple.
2020-03-16 17:12:17 -06:00
Kenneth Moreland
f639e152db Fix ICE in VS 2015
After lots of experimenting, it appears that VS 2015 has problems when
you list a variate template argument before a normal template argument
in a specialization of a function, The compiler seems happy when the
variate argument is placed at the end of the template arguments.
2020-03-16 17:12:16 -06:00
Kenneth Moreland
625a6b4a93 Fix CUDA parse error
The nvcc compiler was having problem resolving a template partial
specialization that contained a template param with its own number
list and another param that depended on that template.
2020-03-16 17:12:16 -06:00
Kenneth Moreland
6f0edbec24 Move from tao::tuple to vtkm::Tuple
The new version of vtkm::Tuple should be faster. It also gives us more
control over the implementation and can provide some VTK-m specific
things.
2020-03-16 17:12:16 -06:00
Kenneth Moreland
5773ea3e13 Add porting layer for future std features
Currently, VTK-m is using C++11. However, it is often useful to use
features in the `std` namespace that are defined for C++14 or later. We
can provide our own versions (sometimes), but it is preferable to use
the version provided by the compiler if available.

There were already some examples of defining portable versions of C++14
and C++17 classes in a `vtkmstd` namespace, but these were sprinkled
around the source code.

There is now a top level `vtkmstd` directory and in it are header files
that provide portable versions of these future C++ classes. In each
case, preprocessor macros are used to select which version of the class
to use.
2020-03-16 17:12:16 -06:00
Kenneth Moreland
56636afc7a Make Tuple class
Made a new vtkm::Tuple class to replace tao tuple.

This version of Tuple should hopefully compile faster. Having our own
implementation should also make it easier to port to new devices.
2020-03-16 17:12:16 -06:00
Kenneth Moreland
594c73c06d Simplify use of ControlArrayValid
Can allocate and set in one step to simplify the code.
2020-03-16 13:01:50 -06:00
Kenneth Moreland
acc9774f67 Fix CUDA warnings 2020-03-16 07:10:11 -06:00
Kenneth Moreland
10e8a4a7f9 Remove locking control ArrayPortals
Previously, when a ReadPortal or a WritePortal was returned from an
ArrayHandle, it had wrapped in it a Token that was attached to the
ArrayHandle. This Token would prevent other reads and writes from the
ArrayHandle.

This added safety in the form of making sure that the ArrayPortal was
always valid. Unfortunately, it also made deadlocks very easy. They
happened when an ArrayPortal did not leave scope immediately after use
(which is not all that uncommon).

Now, the ArrayPortal no longer locks up the ArrayHandle. Instead, when
an access happens on the ArrayPortal, it checks to make sure that
nothing has happened to the data being accessed. If it has, a fatal
error is reported to the log.
2020-03-16 07:10:10 -06:00
Kenneth Moreland
51e817adc1 Introduce vtkm::ErrorCode
This is a flag that functions in the execution environment can return to
report on the status of the operation. This way they can report an error
without forcing the entire invocation to shut down.
2020-03-13 18:58:33 -06:00
Li-Ta Lo
23a0166048 Add ArrayHandlePhiloxURBG
Add implementation and unit tests for ArrayHandlePhiloxURBG
2020-03-13 11:39:57 -06:00
James
adb73b3600 Updating runondevice to use new args. 2020-03-12 10:50:42 -04:00
James
8579d54cb9 Merge remote-tracking branch 'upstream/master' into Enhance-Testing-From-File 2020-03-12 10:10:03 -04:00
Kenneth Moreland
04edc3d202 Avoid raising errors when operating on cells
Cell operations like interpolate and finding parametric coordinates can
fail under certain conditions. Typically these call RaiseError on the
worklet. But that can make a worklet unstable, so provide paths where no
error is raised.
2020-03-12 07:50:01 -06:00
James
d14d6cb7e4 Updating short arguments. 2020-03-11 13:56:02 -04:00
James
7a73b0f547 Updating testing 2020-03-11 13:55:14 -04:00
Vicente Bolea
46d5ab9539 Merge topic 'fix-424-use-scanextended'
9d0da855b ConvertNumComponentsToOffsets using ScanExtented vs. ScanExclusive

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1964
2020-03-11 10:03:54 -04:00
Kenneth Moreland
75cb53d3ad Reset ArrayPortalToken when Detach is called
When `ArrayPortalToken::Detach` was called, the contained `Token` was
detached, but `ArrayPortal` being wrapped might also be holding its own
portal that it is decorating. To ensure that any dependent portals are
also detached, `ArrayPortalToken::Detach` resets itself.
2020-03-09 16:24:23 -06:00
Kenneth Moreland
53c17a6876 Release locks in ArrayHandleVirtual control portals
This fixes an issue where getting a `ReadPortal` or a `WritePortal` from
an `ArrayHandleVirtual` could cause a deadlock from a held token even if
the returned portal was detached or destroyed.

The problem was that `ArrayHandleVirtual` was keeping a reference to the
`ArrayPortal` from the concrete array. This was because the returned
`ArrayPortalRef`, which was designed to work on both control and
execution environments, had no good way to destroy the portal. This
meant that the `ArrayHandleVirtual` was caching a copy of the concrete
array's portal. This was not a great idea before because the array could
get invalidated. It is worse now because it keeps the concrete array
locked.

Fixed the problem by subclassing `vtkm::ArrayPortalRef` to make a
control-specific version that will delete the concrete portal on its own
destruction.
2020-03-09 15:53:38 -06:00
Vicente Adolfo Bolea Sanchez
9d0da855b3 ConvertNumComponentsToOffsets using ScanExtented vs. ScanExclusive
This commit also:
- Removes a corner case not longer used at ArrayPortalGroupVecVariable::get
- Changes doc regarding the number of offset elements in the input
  array handler of ConvertNumComponentsToOffsets.
- Updates invokation of make_ArrayGroupVectVariable in multiple files
- Adds its corresponding changelog entry
2020-03-05 10:57:34 -05:00
Robert Maynard
7457f5616c Merge topic 'invoker_gcc4_warnings'
f4153fe2f Correct warnings found with CUDA 10.2 + gcc 4.8.5

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1974
2020-02-27 09:10:44 -05:00
Robert Maynard
8377806778 Merge topic 'introduce_mapfield_3d_scheduling'
1f1688483 Initial infrastructure to allow WorkletMapField to have 3D scheduling

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1938
2020-02-27 08:02:52 -05:00
Robert Maynard
f4153fe2f9 Correct warnings found with CUDA 10.2 + gcc 4.8.5
Found during building on Centos7 based Power9 machines
2020-02-26 15:16:35 -05:00
Kenneth Moreland
e5a6f2d4b6 Make ArrayPortalWrapper more tolerant of host objects
The ArrayPortalWrapper is used for both execution and control portals.
When it was wrapped around a control portal that does not work on CUDA
devices, we were getting ugly warnings even though the intention was
only to use it in the control environment.
2020-02-26 13:10:51 -07:00
Kenneth Moreland
8569359e14 Add threads library to vtkm_cont
With the new thread safety/token code, the vtkm_cont library now relies
on the pthreads library (or whatever threads library is used by std on
the system). Make sure this library gets added to vtkm_cont.
2020-02-26 13:10:50 -07:00
Kenneth Moreland
14c3d90ac3 Fix race condition in UnitTestToken
Apparently when future::get returns, it is not the case that all
resources of the future are cleaned up (only that the calling function
has returned). Do not rely on this resource cleanup for the test to
pass.
2020-02-26 13:10:48 -07:00
Kenneth Moreland
9b876df96f Remove PortalType from ArrayHandleImplicitTraits
The type for PortalType was declared before the class from which the
type came from. Normally this was not a big deal since the template was
resolved later, but nvcc seemed to have a problem with it.
2020-02-26 13:10:48 -07:00
Kenneth Moreland
188d1c5671 Correct "invalid" portal in ArrayHandleTransform
For an ArrayHandleTransform with no inverse functor, it really
only supports read-only portals. Thus, the non-const portal
for the execution environment was set to some unused control
portal. That was causing problems with CUDA, so make the
non-const portal valid (although without a Set).
2020-02-26 13:10:47 -07:00
Kenneth Moreland
ec34cb56c4 Use new ways to get array portal in control environment
Also fix deadlocks that occur when portals are not destroyed
in time.
2020-02-26 13:10:46 -07:00
Kenneth Moreland
8ddde979f0 ArrayPortalToIterators gets custom iterator from ArrayPortalToken
Because ArrayPortalToken does not have an IteratorType,
ArrayPortalToIterators assumed it had to wrap it in an
IteratorFromArrayPortal object. Now it uses PortalSupportsIterators
(from ArrayPortalHelpers.h) to determine whether the iterators are
there. This does work with ArrayPortalToken.
2020-02-26 13:10:44 -07:00
Kenneth Moreland
6b089be03e Add ArrayPortalToken object and implement Read/WritePortal
To get a portal to access ArrayHandle values in the control
environment, you now use the ReadPortal and WritePortal methods.
The portals returned are wrapped in an ArrayPortalToken object
so that the data between the portal and the ArrayHandle are
guaranteed to be consistent.
2020-02-26 13:10:37 -07:00
Robert Maynard
1f1688483e Initial infrastructure to allow WorkletMapField to have 3D scheduling 2020-02-25 15:23:41 -05:00
Kenneth Moreland
e43770888f Allow Token to have a NULL Internals
This fixes an issue where moving a Token object left the original Token
in an invalid state because the poiner to the internals was NULL. Rather
than allocate a new one, just make the Token work correctly if the
internals are NULL.
2020-02-25 09:39:31 -07:00
Kenneth Moreland
3671cbe168 Fix token issues with CUDA 2020-02-25 09:39:30 -07:00
Kenneth Moreland
098e0fed16 Back out of passing a token when transfering virtual objects
It is questionable whether there is a point to having a token object
when transfering a virtual object to a device (since there is a handle
object that is managing it anyway). Back out of passing the token all
the way down unless there is an actual need for that.
2020-02-25 09:39:29 -07:00
Kenneth Moreland
7aa043b0da Add necessary tokens to OpenMP device algorithms 2020-02-25 09:39:28 -07:00
Kenneth Moreland
b2fdf236e7 Fix deadlocks in device adapters and low level tests
The new Token functionality makes it easy for a thread to deadlock
itself if it does not detach a token after it is done.
2020-02-25 09:39:27 -07: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
Kenneth Moreland
642b59f4fd Allow a token to attach to an ArrayHandle multiple times
When a single `ArrayHandle` is given to multiple arguments of a worklet
dispatch, the `PrepareFor*` methods will be called multiple times with
the same token. If one of them is a `PrepareForInPlace` or
`PrepareForOutput`, then the two requests will deadlock. To prevent
this, allow the `PrepareFor*` to happen if the same token was used
previously.
2020-02-25 07:41:40 -07:00
Kenneth Moreland
76ce9c87f0 Support using Token calling PrepareForExecution in ExecutionObject
The old version of ExecutionObject (that only takes a device) is still
supported, but you will get a deprecated warning if that is what is
defined.

Supporing this also included sending vtkm::cont::Token through the
vtkm::cont::arg::Transport mechanism, which was a change that propogated
through a lot of code.
2020-02-25 07:41:39 -07:00
Kenneth Moreland
ef3f544a67 Add ability to attach token to general ArrayHandle
Duplicated the new versions of PrepareFor* methods from the basic
ArrayHandle that take a token in addition to the other arguments. The
ArrayHandle attaches itself to the token and will not allow operaitons
that make the returned portal invalid until the token goes out of scope.

Later the old versions will be deprecated.
2020-02-25 07:41:37 -07:00
Kenneth Moreland
5f44f3727c Add ability to attach token to standard ArrayHandle
Added new versions of PrepareFor* methods that take a token in addition
to the other arguments. The ArrayHandle attaches itself to the token and
will not allow operations that make the returned portal invalid until
the token goes out of scope.

Later the old versions will be deprecated.
2020-02-25 07:41:36 -07:00
Kenneth Moreland
a49fa83035 Add Token 2020-02-25 07:41:36 -07:00
Robert Maynard
6a62b7f2e4 Merge topic '450_openmp_scaling'
1f61c500e Remove non-atomic ops from BitField unit test.
5565848d9 Use a dynamic strategy for openmp 1D scheduling.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1925
2020-02-11 12:12:47 -05:00
Robert Maynard
dc86ac2077 Avoid a GCC 6.1 compiler regression that occurs when openmp is enabled 2020-01-22 11:06:54 -05:00
Robert Maynard
579a4bab2f Merge topic 'correct_vtkm_cuda_cellset_host_device_warnings'
3e99b1776 Correct host/device warnings in CellSetPermutation found by VTK

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1947
2020-01-21 16:41:17 -05:00
Robert Maynard
3e99b17762 Correct host/device warnings in CellSetPermutation found by VTK 2020-01-21 15:09:48 -05:00
Robert Maynard
3f02558fc2 correct warnings in color table 2020-01-16 17:33:22 -05:00
Robert Maynard
f395e084d8 Merge topic 'correct_warnings_from_osx_dashboard'
b9516c116 Correct CellSetStructured compile failures
00235874d Suppress more warning types from thirdparty includes
a52af2d13 Correct double to float warning in CellAspectFrobeniusMetric
cf5ebfb16 Suppress warning about extension use, since all compilers support it
27739660b Add missing constructors/assignment operators
123f8b01a Mark virtual destructors as override where applicable
54118dfca Use noexcept instead of throw() as it was deprecated in c++11

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1943
2020-01-15 15:27:18 -05:00
Robert Maynard
b9516c116e Correct CellSetStructured compile failures 2020-01-15 08:24:35 -05:00
Robert Maynard
27739660b9 Add missing constructors/assignment operators
Having a custom assignment operator means that the compiler
isn't required to generate the implicit copy constructor.
This makes sure they are constructed.
2020-01-14 11:18:22 -05:00
Robert Maynard
123f8b01aa Mark virtual destructors as override where applicable 2020-01-13 15:54:33 -05:00
James
3ef10a6cb4 Merge branch 'Enhance-Testing-With-Data-From-Files' of https://gitlab.kitware.com/jameskress/vtk-m into Enhance-Testing-With-Data-From-Files 2020-01-10 08:07:11 -05:00
James
6162fdc591 Moving new test code to the Testing.h header. 2020-01-08 14:32:15 -05:00
Allison Vacanti
46b7155bdb Add 64-bit CUDA atomic store. 2020-01-08 10:58:51 -05:00
Allison Vacanti
539f6e5ad7 Port benchmarking framework to Google Benchmark. 2020-01-08 10:58:51 -05:00
James
9d7fc3e6aa Merge branch 'Enhance-Testing-With-Data-From-Files' of https://gitlab.kitware.com/jameskress/vtk-m into Enhance-Testing-With-Data-From-Files 2020-01-08 09:34:42 -05:00
James
10d9f89258 Making the test data path available via a static function call. 2020-01-07 15:56:00 -05:00
Kenneth Moreland
60c57303da Fix name clash of template parameter and field 2020-01-07 07:01:35 -07:00
Kenneth Moreland
4a52a3f7a9 Shorter StorageTag for ArrayHandleZip 2020-01-07 07:01:34 -07:00
Kenneth Moreland
4a626b2e93 Shorter storage tag for ArrayHandleView 2020-01-07 07:01:13 -07:00
Kenneth Moreland
4c8c28d1f1 Shorter storage tag for ArrayHandleReverse
Also discovered that many C++ compilers have trouble giving warnings
for partial specialization of classes marked as deprecated. Fix
the problem by instead deprecating the items in the class.
2020-01-07 07:01:12 -07:00
Kenneth Moreland
bfd21dfae2 Declare StorageTags with VTKM_ALWAYS_EXPORT
This modifier is required on OSX for dynamic_cast to work properly
across libraries.
2020-01-07 07:01:11 -07:00
Kenneth Moreland
1ec716e5d2 Shorten storage tag for ArrayHandlePermutation 2020-01-07 07:01:10 -07:00
Kenneth Moreland
ca0ad1dc22 Shorten storage tag for ArrayHandleIndex 2020-01-07 07:01:10 -07:00
Kenneth Moreland
7bd5802dd8 Shorter storage tag for ArrayHandleGroupVecVariable 2020-01-07 07:01:09 -07:00
Kenneth Moreland
74df1b3857 Shorten storage tag for ArrayHandleGroupVec 2020-01-07 07:01:08 -07:00