Commit Graph

1759 Commits

Author SHA1 Message Date
Allison Vacanti
16c4dde2ee Merge topic 'cuda10_warning'
0e105eae6 cudaPointerAttributes::isManaged deprecated in CUDA 10.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1430
2018-10-10 15:05:57 -04:00
Allison Vacanti
0e105eae6d cudaPointerAttributes::isManaged deprecated in CUDA 10.
Update code to support both the old and new way of checking this.
2018-10-10 13:51:56 -04:00
luz.paz
d5beb69ec1 Misc. typos
Found via `codespell`
2018-10-04 10:30:33 -04:00
Robert Maynard
db1b394336 Merge branch '291_logging' into 'master'
Add general logging support

See merge request vtk/vtk-m!1414
2018-10-04 09:36:47 -04:00
Robert Maynard
e8bc2a56ed make_DeviceAdapterId is now inline to remove duplicate symbols. 2018-10-04 08:42:29 -04:00
Robert Maynard
a512cd495e Allow runtime construction of DeviceAdapterId
When need some way to convert user input such as an integer or
string to a device adapter id. This allows for integer to
device adapter id.
2018-10-03 13:43:31 -04:00
ayenpure
797c838917 Adding default constructor and removing wrong comment 2018-10-02 15:33:36 -07:00
ayenpure
f8150016ea Fixing warnings 2018-10-02 13:12:26 -07:00
Allison Vacanti
bd337854ec Initial implementation of general logging.
Addresses #291.
2018-10-02 11:37:55 -04:00
Sujin Philip
ebcd0ade6a Move test_equal_* functions to vtkm::cont::testing
Implement more general versions of `test_equal_ArrayHandles`, `test_equal_CellSets`, `test_equal_Fields`, and `test_equal_DataSets` functions and put them
in vtkm/cont/testing/Testing.hi with the hope that they will be useful for
others also.
2018-09-25 13:58:39 -04:00
Sujin Philip
365d3d3921 Implement DataSet Serialization 2018-09-25 13:58:39 -04:00
Sujin Philip
fd89dfc89b Add ArrayHandle Serialization 2018-09-25 13:58:39 -04:00
Robert Maynard
caa23b5499 Merge topic 'reverse_conn_support_differing_types'
767eb8206 ReverseConnectivityBuilder can handle 32bit and 64bit connectivity

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1409
2018-09-15 11:45:41 -04:00
ayenpure
0fa7335294 Adding fixes from Ken's review 2018-09-14 11:59:37 -06:00
Robert Maynard
2c218dd958 Merge topic 'osx_static_warnings'
c0a5e1624 Fix vtk-m warnings on static osx builds.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1408
2018-09-13 15:46:37 -04:00
Robert Maynard
767eb82063 ReverseConnectivityBuilder can handle 32bit and 64bit connectivity
This allows ReverseConnectivityBuilder to build any connectivity
independent of vtkm::Id being 32 or 64 bit.
2018-09-13 09:33:31 -04:00
Robert Maynard
c0a5e16249 Fix vtk-m warnings on static osx builds. 2018-09-13 09:15:25 -04:00
mclarsen
0e7e51a1ce resolving merge conflict 2018-09-12 18:58:33 -07:00
mclarsen
1c2f78ca92 refactoring ray tracing 2018-09-10 19:25:42 -07:00
Kenneth Moreland
2b05487398 Add ExecutionAndControlObjectBase
This is a subclass of ExecutionObject and a superset of its
functionality. In addition to having a PrepareForExecution method, it
also has a PrepareForControl method that gets an object appropriate for
the control environment. This is helpful for situations where you need
code to work in both environments, such as the functor in an
ArrayHandleTransform.

Also added several runtime checks for execution objects and execution
and cotnrol objects.
2018-09-08 11:54:28 -06:00
Kenneth Moreland
98a0a20feb Allow ArrayHandleTransform to work with ExecObject
This change allows you to set a subclass of
vtkm::cont::ExecutionObjectBase as a functor
used in ArrayHandleTransform. This latter class will then detect that
the functor is an ExecObject and will call PrepareForExecution with the
appropriate device to get the actual Functor object.

This change allows you to use virtual objects and other device dependent
objects as functors for ArrayHandleTransform without knowing a priori
what device the portal will be used on.
2018-09-05 13:11:04 -06:00
Robert Maynard
7e3727fa9c Convert some vtkm/cont classes over to vtkm::worklet::Invoker 2018-09-04 15:01:18 -04:00
ayenpure
22ca8bce15 Fixing unit test 2018-08-30 10:19:00 -07:00
Kenneth Moreland
ddc85d7385 Merge topic 'dispatcher-auto-device-2'
d879188de Make DispatcherBase invoke using a TryExecute

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1392
2018-08-30 12:59:22 -04:00
ayenpure
d5b4e8411f Rectifying exception messages 2018-08-30 09:41:50 -07:00
ayenpure
5fea2b3f7f Using Length() on vtkm::Range instead of calculation 2018-08-30 09:25:05 -07:00
ayenpure
08421eb638 Fixes for CellLocatorUniformGrid
- Fixing compiler warnings
- Making code concise
2018-08-30 09:01:04 -07:00
ayenpure
42e2bb7f9a Updating files with copyrights 2018-08-29 19:46:49 -07:00
ayenpure
594d1934d4 Adding CellLocatorUniformGrid
- Adding a cell locator to locate points in a uniform grid
- Adding unit tests for the new cell locator
2018-08-29 19:30:07 -07:00
ayenpure
b56d1789b0 Fixing Point Locator interface.
- Fixing the point locator interface to make it consistent with the CellLocator
  interface
2018-08-29 19:26:37 -07:00
Kenneth Moreland
d879188de0 Make DispatcherBase invoke using a TryExecute
Rather than force all dispatchers to be templated on a device adapter,
instead use a TryExecute internally within the invoke to select a device
adapter.

Because this removes the need to declare a device when invoking a
worklet, this commit also removes the need to declare a device in
several other areas of the code.
2018-08-29 19:18:54 -07:00
Allison Vacanti
65d96ae806 Merge topic 'use_rt_dev_name'
a8fa8d918 Use device id names where possible.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1393
2018-08-29 20:08:32 -04:00
Allison Vacanti
a8fa8d9184 Use device id names where possible. 2018-08-29 14:57:19 -07:00
Kenneth Moreland
9841d0e2c5 Add ArrayHandleView
Adds a fancy array handle that restricts access to an array to some
window of values. It takes a start offset and a size and represents the
values between that start offset and size past that.
2018-08-29 13:54:31 -07:00
Allison Vacanti
0ea133dfad Add missing include for OpenMP RuntimeDetector support. 2018-08-29 09:54:52 -07:00
Allison Vacanti
e5fbd7bb6b Fix some missed IdAny renames. 2018-08-29 09:20:44 -07:00
Allison Vacanti
b124984817 Rename Undefined and Any DeviceAdapterId subclasses for consistency. 2018-08-29 09:05:50 -07:00
Allison Vacanti
a878474a38 Merge topic '256_device_adapter_name'
716f393c3 Add DeviceAdapterId::GetName.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1384
2018-08-29 11:52:23 -04:00
Allison Vacanti
716f393c32 Add DeviceAdapterId::GetName. 2018-08-28 14:14:49 -07:00
Robert Maynard
18fdc009a3 Merge topic 'upgrade_algorithms_to_support_runtime_device'
59c8bd28a vtkm::cont::Algorithm now can be told which device to run on at runtime

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1365
2018-08-28 13:34:55 -04:00
Allison Vacanti
024a75821d Make DeviceAdapterId constructor protected.
This forces users to use a defined tag, since they shouldn't need
to create their own.
2018-08-24 16:38:08 -04:00
Allison Vacanti
7ca3b60fe2 Print bytes size in array handle summaries. 2018-08-23 16:40:25 -04:00
Allison Vacanti
669ccb9130 Refactor CellSetExplicit to store connectivity in a shared_ptr.
This addresses issue #268 by ensuring that the CellToPoint validity
flag survives FunctionInterface's value copies.
2018-08-23 11:13:13 -04:00
Allison Vacanti
2b169eeb3b Use requested device in CellSetExplicit::PrepareForInput.
The BuildConnectivity method was falling back to the global
runtime device tracker instead of using the templated device.
2018-08-22 16:07:48 -04:00
Allison Vacanti
1436c1b6df Merge topic '285_singletype_rconn_opt'
ec4cf2da3 Specialize the CellToPoint computation for CSSingleType.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1371
2018-08-21 13:50:49 -04:00
Allison Vacanti
ec4cf2da3f Specialize the CellToPoint computation for CSSingleType.
It's much cheaper to compute the cell id from a connectivity
index when all cells are the same size.
2018-08-21 12:36:15 -04:00
Haocheng LIU
7d22132253 Merge topic 'allow-disabling/enabling-cuda-managed-memory'
e34301eca Allow disabling/enabling of CUDA managed memory via an env variable

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1359
2018-08-17 13:14:02 -04:00
Haocheng LIU
e34301eca8 Allow disabling/enabling of CUDA managed memory via an env variable
By setting the environment variable "VTKM_MANAGEDMEMO_DISABLED" to be 1,
users are able to disable CUDA managed memory even though the hardware is
capable of doing so.
2018-08-17 11:10:15 -04:00
Robert Maynard
59c8bd28aa vtkm::cont::Algorithm now can be told which device to run on at runtime 2018-08-16 16:08:34 -04:00
Sujin Philip
1212081de1 Support deferred freeing for CUDA memory
Calls to 'cudaFree' block execution on all cuda devices. Reduce the number of
times this happens by having a deferred free mechanism that frees a pool
of pointers together when a threshold is reached.

Especially helpful during virtual object transfers that requires a few small
allocations and frees.
2018-08-16 12:05:36 -04:00
Robert Maynard
20a62ae560 Merge topic 'use_better_runtime_device_representation'
28e0eb9da Replace FindDeviceAdapterTagAndCall with TryExecuteOnDevice

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1356
2018-08-14 14:59:36 -04:00
Allison Vacanti
f6da092146 Use CUDA_ARCH instead of CUDACC to guard device-only code.
CUDACC is defined when compiling host code under nvcc, while
CUDA_ARCH is only defined for host code.
2018-08-09 11:57:05 -04:00
Allison Vacanti
727ebee197 Merge topic 'cuda_array_handles_on_cuda8'
2c079b96d Make AtomicArrays work on CUDA 8.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1357
2018-08-09 10:34:10 -04:00
Robert Maynard
c332dbd0a1 Only add the rules to run openmp tests serially when testing is enabled 2018-08-08 15:46:32 -04:00
Allison Vacanti
2c079b96dd Make AtomicArrays work on CUDA 8.
CUDA 8.0 is erroring out in the cuda AtomicArray implementation:

https://open.cdash.org/viewBuildError.php?buildid=5489156

This patch fixes the error. See comments in source for more info.
2018-08-08 15:26:32 -04:00
Robert Maynard
28e0eb9da6 Replace FindDeviceAdapterTagAndCall with TryExecuteOnDevice
Also add a throwFailedRuntimeDeviceTransfer that throws a nicely
detailed message on why a something couldn't be transfered to
the requested device adapter.
2018-08-08 14:53:28 -04:00
Robert Maynard
a3fe97709c Merge topic 'openmp_tests_run_serial'
48cc2f661 Make sure VTK-m runs all OpenMP tests serially.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Allison Vacanti <allison.vacanti@kitware.com>
Merge-request: !1354
2018-08-08 13:10:15 -04:00
Robert Maynard
c4fa66aff4 Merge topic 'better_runtime_device_representation'
554bc3d36 At runtime TryExecute supports a specific deviceId to execute on.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1334
2018-08-08 12:41:32 -04:00
Robert Maynard
48cc2f661a Make sure VTK-m runs all OpenMP tests serially.
Fixes issue #276.
OpenMP tests when run in parallel exhibit negative scaling as we
have N openMP processes each spawning N threads. We speculate that
this causes excessive context switching and swapping and reduces
performance.
2018-08-08 10:01:18 -04:00
luz.paz
7f9b54a31a Misc. typos
Found via `codespell -q 3`
2018-08-07 17:50:41 -04:00
Robert Maynard
554bc3d369 At runtime TryExecute supports a specific deviceId to execute on.
Instead of always using the first enabled device, now TryExecute
can be told which device at runtime to use.
2018-08-07 17:22:18 -04:00
Haocheng LIU
282a2bf8f3 Add more unit tests for OpenMP DeviceAdapter 2018-08-07 11:32:21 -04:00
Haocheng LIU
ccc985748d Merge topic 'use-std-call_once-to-construct-singletons'
ce9cd8072 Use std::call_once to construct singeltons

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1350
2018-08-06 17:11:19 -04:00
Haocheng LIU
ce9cd8072a Use std::call_once to construct singeltons
By using `call_once` from C++11, we can simplify the logic in code
where we are querying same value variables from multiple threads.
2018-08-06 16:36:03 -04:00
Robert Maynard
3533975694 Remove usages of std::vector from OpenMP reduction algorithm
The OpenMP Device Reduction algorithm previously used a std::vector<T>
to store the reduction results of each thread. This caused problems
when T=bool as the types became a proxy type which isn't usable
with vtkm BinaryOperators.

Additionally by fixing this issue in the FunctorsOpenMP we
can remove a workaround in FunctorsGeneral that caused
compile failures when using complex BinaryOperators
such as MinAndMax.
2018-08-06 13:08:33 -04:00
Haocheng LIU
1fcbca3eed Replace std::random_shuffle with std::shuffle
std::random_shuffle is deprecated in C++14 because it's using std::rand
which uses a non uniform distribution and the underlying algorithm is
unspecified. Using std::shuffle can provide a reliable result in a 64
bit version.
2018-08-02 12:15:58 -04:00
Haocheng LIU
c95db1fc78 Use thread_local in GetGlobalRuntimeDeviceTracker if possible
It will reduce the cost of getting the thread runtime device tracker,
and will have a better runtime overhead if user constructs a lot of
short lived threads that use VTK-m.
2018-08-01 15:51:24 -04:00
Sujin Philip
259d670ab5 Merge topic 'cuda-per-thread-streams-2'
06dee259f Minimize cuda synchronizations

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1288
2018-07-25 15:07:39 -04:00
Robert Maynard
4ca4c17415 DeviceAdapterTagTestAlgorithmGeneral Id is positive value.
All valid devices must use a positive integer value as the
RuntimeTracker and VirtualObject consider all negative values
to be errors.
2018-07-25 14:09:00 -04:00
Robert Maynard
b51c773766 Allow ArrayHandleBasicImpl to work when we add new devices
Previously ArrayHandleBasicImpl had no support for OpenMP since
we forgot to update the implementation. This version will
work when adding new devices without any changes.
2018-07-25 12:57:27 -04:00
Robert Maynard
42af1d09c2 Merge topic 'ExecutionArrayInterfaceBasic_explicitly_constructs_DeviceAdapterIds'
e031e6496 ExecutionArrayInterfaceBasic<T> explicitly construct DeviceAdapterId objects
86b9ab996 Refactor ExecutionArrayInterfaceBasic to use inheriting constructors

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Sujin Philip <sujin.philip@kitware.com>
Merge-request: !1330
2018-07-25 12:53:59 -04:00
Robert Maynard
24d3aa0428 Merge topic 'everyone_treat_deviceAdapterId_as_real_type'
14824bd42 Make sure people always treat DeviceAdapterId as a proper type

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Sujin Philip <sujin.philip@kitware.com>
Merge-request: !1332
2018-07-25 12:05:05 -04:00
Robert Maynard
e031e64967 ExecutionArrayInterfaceBasic<T> explicitly construct DeviceAdapterId objects
Rather than implicitly presume the `VTKM_DEVICE_ADAPTER_` macros can
convert to DeviceAdapterId.
2018-07-25 12:04:30 -04:00
Robert Maynard
86b9ab9969 Refactor ExecutionArrayInterfaceBasic to use inheriting constructors 2018-07-25 12:03:48 -04:00
Robert Maynard
14824bd42e Make sure people always treat DeviceAdapterId as a proper type 2018-07-25 11:00:06 -04:00
Robert Maynard
36be8f97a1 DeviceAdapterAlgorithmOpenMP doesn't depend on the serial device.
It should be possible to build VTK-m without the serial device
adapter enabled, and therefore the OpenMP device shouldn't
rely on it.
2018-07-25 10:37:04 -04:00
Robert Maynard
f6b0c6a7a6 Merge topic 'remove_DeviceAdapterTagCheck'
f6789d9cf Remove DeviceAdapterTagCheck with DeviceAdapterTraits

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1329
2018-07-24 11:12:09 -04:00
Robert Maynard
f6789d9cfd Remove DeviceAdapterTagCheck with DeviceAdapterTraits
The DeviceAdapterTraits already contains if the device adapter is
valid, and therefore DeviceAdapterTagCheck is redundant.
2018-07-24 08:16:48 -04:00
Robert Maynard
d595abf907 WrappedBinaryOperator now supports std::vector<bool>::reference 2018-07-23 14:24:19 -04:00
Robert Maynard
8a44d0a5ae Merge topic 'vtkm_cont_less_device_sources'
d7660a556 vtkm_cont listed non-device sources as device-source

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Sujin Philip <sujin.philip@kitware.com>
Merge-request: !1324
2018-07-19 15:57:02 -04:00
Robert Maynard
d3326a37a6 ReverseConnectivityBuilder now uses the new vtkm::cont::AtomicArray
Fixes Issue #270
2018-07-19 13:39:47 -04:00
Robert Maynard
d7660a556c vtkm_cont listed non-device sources as device-source
Cleanup the device sources list in vtkm_cont to only contain
.cxx files that could invoke cuda
2018-07-19 12:59:34 -04:00
Kenneth Moreland
b4bfb95131 Merge topic 'atomic-array-device-execution'
96ae94420 Simplified execution object creation for atomic array
0bd197af9 moved TwoLevelUniformGridExecutionObject to vtkm/exec/internal
6ce895be8 simplified how atomic arrays create execution objects
f1ee5b92a fix a rebase error
25d140361 fix bad rabse for wireframer
f892695f1 fixing so wierd merging issue
9bb00ec66 moved the execution object for TwoLevelUniform grid to vrkm::exec
db1c9bfee Change the namespacing of atomic array
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1243
2018-07-18 18:08:05 -04:00
Robert Maynard
4240111dd8 Make sure VirtualObjectHandle tests include RuntimeDeviceTracker 2018-07-18 10:37:46 -04:00
Robert Maynard
8077b031a8 Merge topic 'uncomment_cuda_range_test'
1e478bbe6 Re-enable UnitTestCudaComputeRange

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1321
2018-07-17 13:28:05 -04:00
Robert Maynard
f331d6d686 Merge topic 'remove_unneeded_typeinfo_includes'
bf49575e0 Remove unneeded typeinfo includes

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1320
2018-07-17 13:27:46 -04:00
Robert Maynard
1e478bbe63 Re-enable UnitTestCudaComputeRange 2018-07-17 11:43:19 -04:00
Robert Maynard
bf49575e00 Remove unneeded typeinfo includes 2018-07-17 11:41:53 -04:00
Allison Vacanti
ef578bb2c7 Reduce computational overhead for reverse connectivity calc.
Benchmarking in VTK showed significant overhead in the computation
of the reverse connectivity calculation in
ConnectivityExplicitInternals::ComputeCellToPointConnectivity.

This patch adds a ReverseConnectivityBuilder that reduces the amount of
time and memory needed to build the table by using an atomic histogram
approach that avoids a costly radix SortByKey.

Key operations in the new helper class are templated to allow this
approach to be reused by VTK-specific cell array converters.
2018-07-13 14:15:06 -04:00
Kenneth Moreland
2dbc45ac08 Merge topic 'fix-cuda-warnings'
6d24343c5 Add exec to ArrayPortalFromIterators constructors
91df12305 Remove VTKM_EXEC modifiers from CPU devices

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1318
2018-07-12 13:18:25 -04:00
Robert Maynard
6dc06423d8 ColorTable can provide vtkm::exec::Colortable to a specific device
Previously it wasn't possible to get a color table transfered
to a specific device.
2018-07-12 10:28:18 -04:00
Kenneth Moreland
6d24343c51 Add exec to ArrayPortalFromIterators constructors
There is no real reason why you cannot construct an
ArrayPortalFromIterators on a device, so go ahead and let that happen.
(This removes some CUDA warnings about calling __host__ from
__device__.)
2018-07-12 08:09:22 -06:00
Kenneth Moreland
91df123055 Remove VTKM_EXEC modifiers from CPU devices
Having VTKM_EXEC on algorithms for CPU devices was problematic because
the algorithms were specific to the CPU, but during a CUDA compile it
would try to compile device code (for no reasons since it was never
called on a device).

Remove these identifiers for the idea that a device implementation knows
specifically what function modifiers to use and does not need the VTK-m
defined catch-alls.
2018-07-11 16:45:30 -06:00
Matthew Letter
96ae94420d Simplified execution object creation for atomic array
simplified the creation of the execution object in the transport tag of the atomic array.
2018-07-11 10:58:51 -06:00
Kenneth Moreland
abfc946f84 Merge topic 'exec-objects-as-alg-sort-compare'
f14021dd8 Shorten code for PrepareArgForExec
3b828608a Support ExecArg behavior in vtkm::cont::Algorithm methods

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1308
2018-07-10 19:01:40 -04:00
Kenneth Moreland
f14021dd84 Shorten code for PrepareArgForExec
By making is_base_of part of PrepareArgForExec, we can shorten not only
the C++ code but also the code that is generated by it.

Also, return && instead of by value when passing through the argument.

Changes thanks to Robert Maynard.
2018-07-10 13:48:20 -06:00
Matthew Letter
0bd197af96 moved TwoLevelUniformGridExecutionObject to vtkm/exec/internal
Also changed the namespacing to vtkm::exec::twolevelgrid after discussion with Rob
2018-07-09 16:28:09 -06:00
Matthew Letter
6ce895be8d simplified how atomic arrays create execution objects
the way atomic arrays created objects was a little over cmplicated, this commit makes it much simpler
2018-07-09 15:04:23 -06:00
Robert Maynard
64958b014b VTK-m now supports passing pointers when invoking worklets.
The original design of invoke and the transport infrastructure
relied on the implementation behavior of vtkm::cont types
such as ArrayHandle that used an internal shared_ptr to managed
state. This allowed passing by value instead of passing by
non-const ref when needing to transfer information to the device.

As VTK-m adds support for classes that use virtuals the ability
to pass by base pointer type allows for us to invoke worklets
using a base type without the risk of type slicing.

Additional by moving over to a non-const ref Invocation we
can update all transports that have 'output' to now be
by ref and therefore support types that can't be copied while
being 'more' correct.
2018-07-06 14:27:36 -04:00
Kenneth Moreland
3b828608a4 Support ExecArg behavior in vtkm::cont::Algorithm methods
Most of the arguments given to device adapter algorithms are actually
control-side arguments that get converted to execution objects internally
(usually a `vtkm::cont::ArrayHandle`). However, some of the algorithms,
take an argument that is passed directly to the execution environment, such
as the predicate argument of `Sort`. If the argument is a plain-old-data
(POD) type, which is common enough, then you can just pass the object
straight through. However, if the object has any special elements that have
to be transferred to the execution environment, such as internal arrays,
passing this to the `vtkm::cont::Algorithm` functions becomes
problematic.

To cover this use case, all the `vtkm::cont::Algorithm` functions now
support automatically transferring objects that support the `ExecObject`
worklet convention. If any argument to any of the `vtkm::cont::Algorithm`
functions inherits from `vtkm::cont::ExecutionObjectBase`, then the
`PrepareForExecution` method is called with the device the algorithm is
running on, which allows these device-specific objects to be used without
the hassle of creating a `TryExecute`.
2018-07-06 18:57:54 +02:00
Robert Maynard
9238cedcab Merge topic 'ice_nvcc_on_renar'
5ced0da8f Try to ice the ubuntu 17.10 + cuda 9.1 compiler

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !1305
2018-07-05 11:36:16 -04:00
Robert Maynard
5ced0da8f5 Try to ice the ubuntu 17.10 + cuda 9.1 compiler 2018-07-05 09:14:52 -04:00
Robert Maynard
e5090e1289 Make sure the PointLocatorUniform uses the correct runtime device 2018-07-03 17:42:57 -04:00
Matthew Letter
f892695f16 fixing so wierd merging issue
somehow a rebase removed code that shouldnt have been removed so I added the code back in, gonna see if I can squash this commit later
2018-07-03 14:28:29 -06:00
Sujin Philip
06dee259f7 Minimize cuda synchronizations
1. Have a per-thread pinned array for cuda errors
2. Check for errors before scheduling new tasks and at explicit sync points
3. Remove explicit synchronizations from most places

Addresses part 2 of #168
2018-07-03 14:19:06 -04:00
Allison Vacanti
8b0777c4b1 Merge topic 'cuda_32bit_id_fix'
1751b4932 Fix build error and host/device warnings on 32-bit builds with CUDA.
768086a0f Merge branch 'upstream-taotuple' into cuda_32bit_id_fix
d4b38a78a taotuple 2018-06-29 (4bd72b5e)
b4110cd5d Update update.sh for taotuple to reflect upstream changes.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1295
2018-07-03 10:47:55 -04:00
Matthew Letter
9bb00ec66d moved the execution object for TwoLevelUniform grid to vrkm::exec 2018-07-02 16:25:48 -06:00
Matthew Letter
db1c9bfeee Change the namespacing of atomic array
moved the execution object to vtkm::exec and AtomicArray to vtkm::cont
2018-07-02 16:25:48 -06:00
Matthew Letter
6b9cb536a8 added new lines at the end of bot recommended files 2018-07-02 16:21:00 -06:00
Matthew Letter
3c9e7f049f updated Atomic array to use new excution object paradigm 2018-07-02 16:21:00 -06:00
Kenneth Moreland
71486f0864 Fix TestingPointLocatorUniformGrid for double precision
There was an error in TestingPointLocatorUniformGrid in which it was
creating arrays of type vtkm::Float32 and passing them to a worklet that
expected vtkm::FloatDefault. This is corrected.
2018-07-01 11:27:35 +02:00
ayenpure
e2dccee099 Merge branch 'master' of https://gitlab.kitware.com/vtk/vtk-m into spatialsearch 2018-06-30 11:56:33 -06:00
ayenpure
ebdad45d44 Removing VTKM_CONT_EXPORT for the CellLocator 2018-06-30 07:09:41 -06:00
Abhishek Yenpure
e42c270f89 fixing -Wmissing-field-initializers for BoundingIntevalHierarchyNode 2018-06-29 18:58:28 -07:00
Abhishek Yenpure
b5f2e7060e Moving changes of .cxx to .hxx
-For the BoundingIntervalHierarchy CUDA had failures with using
 .cxx file to implement the virtual methods
-Moving the contents to the .hxx file after discussing with Rob
 over email
-Need to still work on the .cxx implementation after merge
2018-06-29 16:11:16 -07:00
ayenpure
e0296a24b6 Fixes for resolving Rob's suggestions
- Releasing GPU resources when not needed.
- Adding VTK_EXEC to TreeNode and SplitProperties constructors
2018-06-29 15:55:23 -07:00
Abhishek Yenpure
dcbb444a74 Warning fixes for BoundingIntervalHierarchy
- Adding VTKM_CONT_EXPORT to CellLocator
- Removing whitespaces
- Fixing warnings of unused typedef
2018-06-29 14:51:50 -06:00
Allison Vacanti
1751b49327 Fix build error and host/device warnings on 32-bit builds with CUDA.
Error: Throwing an exception in CUDA code.
Fix: Change method throwing exception to VTKM_CONT.
New warning: host/device warning in taotuple.
Fix: Markup additional taotuple methods with suppressions.

This also updates our taotuple checkout to match upstream master.
2018-06-29 16:46:18 -04:00
Abhishek Yenpure
50963290dc Moving BoundingIntervalHierarchy.cxx to device sources
Rectifying print statements in the unit test
2018-06-29 10:46:31 -07:00
ayenpure
bf224dbb7c Adding VTKM_CONT_EXPORT to BoundingIntervalHierarchy 2018-06-29 10:57:25 -06:00
ayenpure
98c45403d3 Removing initialization for Nodes and CellIds for CUDA failure 2018-06-29 10:00:46 -06:00
ayenpure
2714da8f0e Adding changes suggested by Rob on GitLab
- Seperate BoundingIntervalHierarchy.h into
  - BoundingIntervalHierarchy.h
  - BoundingIntervalHierarchy.hxx
  - BoundingIntervalHierarchy.cxx
2018-06-29 09:09:24 -06:00
Abhishek Yenpure
ab81c6335b Changing Float64 to FloatDefault 2018-06-28 13:00:33 -07:00
Abhishek Yenpure
adde6491a1 SplitProperties and TreeNode -Wmissing-field-initializers fixes 2018-06-28 12:46:45 -07:00
Kenneth Moreland
4459ab9174 Merge branch 'master' into 'pointlocator-general-interface'
# Conflicts:
#   vtkm/cont/PointLocatorUniformGrid.h
2018-06-28 12:51:08 -04:00
Allison Vacanti
404939d6d4 Merge topic 'doxygen_fixes'
1e53b86ea Identifiers in doxygen @param blocks must appear in signature.
828bb3179 Silence expected doxygen warning.
6db40ae49 Newline needed after \file command.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1291
2018-06-28 11:35:43 -04:00
Abhishek Yenpure
72d4556f7d Adding changes for Ken's review from GitLab
- Reducing the stack allocation for CUDA for the BIH unit test
- Adding changes from Ken's review
- Suppress ptxas stack size warning for BoundingIntervalHierarchy
2018-06-27 22:40:13 -06:00
Kenneth Moreland
6f75cd008b Fix crash in CUDA compiler
Previously when PointLocatorUniformGrid.h was compiled by the CUDA
compiler, the compiler would crash. Apparently during the ptxas
part of the compiler goes into a crazy recursion and runs out of
stack space. This appears to be a long-standing bug in CUDA
(been there for multiple releases) without a clear reason why it
sometimes rears its ugly head. (See for example
https://devtalk.nvidia.com/default/topic/1028825/cuda-programming-and-performance/-ptxas-died-with-status-0xc00000fd-stack_overflow-/)

The problem appears to be when having a doubly or triply nested
loop over a box of values to check in the uniform array. This
appears to fix the problem by converting that to a single for
loop with some index magic to convert that to 3D indices.
2018-06-27 23:52:48 +02:00
Allison Vacanti
1e53b86ea4 Identifiers in doxygen @param blocks must appear in signature. 2018-06-27 14:10:05 -04:00
Kenneth Moreland
439beaaed9 Make point locator tests have consistent devices 2018-06-27 10:37:59 +02:00
Kenneth Moreland
33f1f2dd1d Make sure all source files are listed in CMake 2018-06-27 10:12:40 +02:00
Kenneth Moreland
367ca3e21d Correct error of grabbing reference of stack variable 2018-06-27 10:04:01 +02:00
Li-Ta Lo
693c8ea8cd Update PointLocatorUniformGrid.h
See if the problem is the DeviceList.
2018-06-26 18:12:53 -04:00
Li-Ta Lo
9c2fdd5745 infinite loop at ptxas 2018-06-26 13:35:22 -06:00
Li-Ta Lo
b2f16a64fb Merge branch 'master' into pointlocator2 2018-06-25 14:35:19 -06:00
Li-Ta Lo
8df78aedc7 TestingPointLocatorUniformGrid works for serial backend 2018-06-25 14:17:33 -06:00
Allison Vacanti
a8d8b3670d Suppress host/device warnings on CUDA atomics. 2018-06-25 14:53:53 -04:00
ayenpure
7a122f23b4 Fixing Problems with Locators
-Fix missing copyright statements
-Updating the PointLocator interface
-Updating the Cell Locator unit test to use less memory and finish early
2018-06-24 14:55:11 -06:00
ayenpure
f018a8a7d1 Removing unnecessary print statements
- Removing debug print statements from the Bounding Inteval Hierarchy Cell
  Locator
2018-06-23 18:49:57 -06:00
ayenpure
bfb30fb468 Using VirtualObjectHandle for vtkm::exec::CellLocator
- Changing the name PrepareForExecutionOnDevice to PrepareForExecutionImpl

- Adding changes suggested by Ollie and Ken to return the execution object
  from PrepareForExecutionImpl using VirtualObjectHandle

- Updating PrepareForExecutionFunctor
2018-06-23 17:09:29 -06:00
Kenneth Moreland
5f807db2ff Make IsWriteableArrayHandle independent of device
Previously, to query whether an ArrayHandle was writable with
IsWriteableArrayHandle, you had to specify a device adapter. The idea
was that it would look at the portal used for that device adapter.
Instead, check the control pointer, which should give the same
indication without having to have a separate check for every type of
device.
2018-06-23 15:34:30 -06:00
Li-Ta Lo
c4921c0e7a fixed all most of compiler error, able to print something from point locator on execution side 2018-06-22 17:11:03 -06:00
Li-Ta Lo
b4f7e9467d split control and execution part of point locator 2018-06-22 14:21:07 -06:00
Li-Ta Lo
4fb64617ba Merge remote-tracking branch 'origin/master' into pointlocator2 2018-06-22 14:19:07 -06:00
Li-Ta Lo
1165845422 commit before mergin master 2018-06-22 14:18:55 -06:00
Robert Maynard
e99aa10ec8 Merge topic 'leverage_decltype_more_often'
dfadaabfb VTK-m Transport doesn't rely on 'ExecutionTypes' typedefs.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Sujin Philip <sujin.philip@kitware.com>
Merge-request: !1272
2018-06-21 15:56:02 -04:00
David Thompson
d8cf1f7b51 Merge topic 'geometry-squashed'
880d8a989 Add `vtkm/Geometry.h` and test it.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1262
2018-06-20 14:15:50 -04:00
David Thompson
880d8a989e Add vtkm/Geometry.h and test it.
This commit adds several geometric constructs to vtk-m
in the `vtkm/Geometry.h` header. They may be used from
both the execution and control environments.

We also add methods to perform projection and Gram-Schmidt
orthonormalization to `vtkm/VectorAnalysis.h`.

See `docs/changelog/geometry.md` included in this commit
for more information.
2018-06-20 11:58:14 -04:00
Robert Maynard
dfadaabfb7 VTK-m Transport doesn't rely on 'ExecutionTypes' typedefs.
By using decltype we can allow for more flexible types and
remove the nasty '::template ' syntax.
2018-06-19 14:16:47 -04:00
Li-Ta Lo
2e519f6508 Merge branch 'pointlocator' into pointlocator2 2018-06-19 12:06:54 -06:00