Commit Graph

101 Commits

Author SHA1 Message Date
Kenneth Moreland
46a613d183 Speed up compilation of ArrayRangeCompute.cxx
The file `ArrayRangeCompute.cxx` was taking a long time to compile with
some device compilers. This is because it precompiles the range computation
for many types of array structures. It thus compiled the same operation
many times over.

The new implementation compiles just as many cases. However, the
compilation is split into many different translation units using the
instantiations feature of VTK-m's configuration. Although this rarely
reduces the overall CPU time spent during compiling, it prevents parallel
compiles from waiting for this one build to complete. It also avoids
potential issues with compilers running out of resources as it tries to
build a monolithic file.
2023-06-19 08:37:15 -06:00
Vicente Adolfo Bolea Sanchez
d5ce967890 CMAKE: fix vtkm devices namespaces 2022-12-26 13:40:12 -05:00
Vicente Adolfo Bolea Sanchez
049d0cca8c cmake: namespace vtkm export targets 2022-12-09 18:46:56 -05:00
Kenneth Moreland
f4b972afaa Merge topic 'no-deprecated-virtual'
ea560e948 Remove deprecated virtual methods

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2903
2022-10-31 14:38:32 -04:00
Kenneth Moreland
ea560e9486 Remove deprecated virtual methods
Several revisions ago, the ability to use virtual methods in the
execution environment was deprecated. Completely remove this
functionality for the VTK-m 2.0 release.
2022-10-28 10:56:52 -06:00
Kenneth Moreland
96b447e69a Fix some deprecated hacks in modules
When the configure modules were first created, there were some hacks
around filters that had not yet moved to the new filter mechanism. These
can (and should) be removed.
2022-10-27 10:24:28 -06:00
Kenneth Moreland
ad1e7b5bdb Add module mechanism
This mechanism sets up CMake variables that allow a user to select which
modules/libraries to create. Dependencies will be tracked down to ensure
that all of a module's dependencies are also enabled.

The modules are also arranged into groups.
Groups allow you to set the enable flag for a group of modules at once.
Thus, if you have several modules that are likely to be used together,
you can create a group for them.

This can be handy in converting user-friendly CMake options (such as
`VTKm_ENABLE_RENDERING`) to the modules that enable that by pointing to
the appropriate group.
2022-10-26 12:51:05 -06:00
Vicente Adolfo Bolea Sanchez
7ceec1ddac libs: proper version and soversion in vtk-m libs
This commit reflects the changes of VTK-m API/ABI release plans in
which we attempt ABI compatibility in patch releases.

- It also sets the version/soname for diy thirdparty module lib
2022-10-10 13:49:56 -04:00
Vicente Bolea
b40d7105cf Merge topic 'add-cuda-arch'
af129132c CMAKE: add CMAKE_CUDA_ARCHITECTURE support

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2724
2022-03-30 11:49:44 -04:00
Vicente Adolfo Bolea Sanchez
af129132cc CMAKE: add CMAKE_CUDA_ARCHITECTURE support 2022-03-29 19:56:43 -04:00
Kenneth Moreland
61a44887fd Update vtkm_add_instantiations documentation 2022-03-23 06:34:05 -06:00
Kenneth Moreland
6eb9c9876c Add generalized instantiation
Recently, an instantiation method was added to the VTK-m configuration
files to set up a set of source files that compile instances of a template.
This allows the template instances to be compiled exactly once in separate
build files.

However, the implementation made the assumption that the instantiations
were happening for VTK-m filters. Now that the VTK-m filters are being
redesigned, this assumption is broken.

Thus, the instantiation code has been redesigned to be more general. It can
now be applied to code within the new filter structure. It can also be
applied anywhere else in the VTK-m source code.
2022-03-23 06:33:36 -06:00
Vicente Adolfo Bolea Sanchez
555013cdda CMAKE: add unity builds support 2021-11-10 15:03:11 -05:00
Kenneth Moreland
8ea7fbc350 Add clarification for DEVICE_SOURCES
The `vtkm_add_target_information` CMake function has a `DEVICE_SOURCES`
option that allows you to list which sources need to be compiled with a
device compiler. Added some hints to the documentation about which
source code needs to be listed in `DEVICE_SOURCES`.
2021-10-12 13:50:42 -06:00
Jieyang Chen
a157c0e846 Add changes for supporting Kokkos/HIP
Some of the unit tests for serial and kokkos are disable for hipcc to
properly compile.
VTKM_MATH_ASSERT and VTKM_TEST_ASSERT fail to compile with HIP in
execution environment so they are disabled with building with HIP.
Kokkos::finalize is causing error so it is temporarily disabled.
2021-10-01 15:27:00 -04:00
Vicente Adolfo Bolea Sanchez
c0eb7138cb Instatiations: fix paths templates inside project
When VTKm is used inside another CMAKE project the instatitations will
include its filers with the relative path from the top lever of the
parent project instead of the top level of the VTKm project. This commit
resolves that.
2021-09-20 16:10:29 -04:00
Ben Boeckel
73353fea70 Merge topic 'allow-skip-version-links'
09d5b9471 cmake: allow VTK to skip soname links for libraries

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Vicente Bolea <vicente.bolea@kitware.com>
Merge-request: !2563
2021-08-26 13:58:44 -04:00
Ben Boeckel
09d5b9471e cmake: allow VTK to skip soname links for libraries
VTK's wheels do not want these symlinks because they are useless in
Python wheels.
2021-08-26 12:06:09 -04:00
Vicente Adolfo Bolea Sanchez
d348b11183 Enable shared CUDA builds when not compiling virtuals
The reason why we did not support shared libraries when CUDA compiles
were on is that virtual methods require a special linking step to pull
together all virtual methods that might be called. I other words, you
cannot call a virtual CUDA method defined inside a library. This
requirement goes away when virtuals are removed.

Also removed the necessity of using seprable compilation with cuda.
Again, this is only needed when a CUDA function is defined in one
translation unit and used in another. Now we can enforce that all
translation units define their own CUDA functions.

Also, suppress warnings in cuda/internal/ExecutionPolicy.h

This is where we call the thrust algorithms. There must be some loop
where it, on some code path, calls back a host function. This must be in
an execution path that never happens. The thrust version has its own
suppress, but that does not seem to actually suppress the warning (it
just means that the warning does not tell you where the actual call is).

Get around the problem by suppressing the warnings in VTK-m.

Co-authored-by: Kenneth Moreland <morelandkd@ornl.gov>
Co-authored-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>

Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2021-08-24 13:14:58 -04:00
Vicente Adolfo Bolea Sanchez
b6fc783631 Filters: Add cmake instantiations generator
Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2021-08-14 13:39:53 -04:00
Robert Maynard
7897d23c39 Cleanup some minor CMake style issues 2020-12-28 10:36:00 -05:00
Robert Maynard
7475c318be VTK-m now uses CMake's future HIP lang for Kokkos+HIP 2020-12-11 09:13:12 -05:00
Robert Maynard
96fc02ebca VTK-m when using CMake 3.18 can propagate cuda flags cleanly 2020-08-20 13:12:05 -04:00
Vicente Adolfo Bolea Sanchez
afd394377e cmake: split vtkm_filter into common|extra|contour|gradient
There is a limitation in Windows builds using VS2019 where libraries cannot be
bigger than 4GiB. This is normally not an issue but in `VTKm` due to its strong
template usage libraries can reach that size.

The `VTKm` filter library is can easily reach that size and it will halt the
build

This MR tries to avoid reaching those sizes for now by splitting the filter
library into four smaller libraries.

The proposal scheme is:

It splits vtkm-filter into:

  - vtkm-common, Classes that are dependencies of other filter libs.
  - vtkm-contour, Contour class and its instantiations.
  - vtkm-contour, Gradient class and its instantiations.
  - vtkm-extra, Classes other than Contour or Gradient that are
    not dependencies.

Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
2020-08-19 19:20:43 -04:00
Sujin Philip
452f61e290 Add Kokkos backend 2020-08-12 13:55:24 -04:00
Robert Maynard
7092bb9210 Make sure we don't leak our findmpi module
Consumers of VTK-m shouldn't use VTK-m find mpi module unless
they explicitly want to. This makes sure that by default only
VTK-m uses it.
2020-06-19 11:43:36 -04:00
Robert Maynard
565d5a3a2e Remove CMake workarounds for version < 3.12 2020-05-29 17:15:06 -04:00
NAThompson
331b80a783 More understandable VTKm options for symbol visibility. 2020-05-12 16:02:16 -04:00
Robert Maynard
53158aa2ea Don't allow ninja job pool sizes to be negative
If the job pool size becomes negative, ninja treats
it as an absurdly large positive integer and
errors out.
2019-12-19 08:44:12 -05:00
Robert Maynard
f578c90685 Make sure vtkm_setup_job_pool() doesn't output any status 2019-12-03 11:32:14 -05:00
Robert Maynard
7fc7c61a9b VTK-m use a jobs pool for compiling large compilation units.
When building with the ninja generator VTK-m now uses a job pool
to help limit the chances of a machine going out of memory
when compiling VTK-m.
2019-11-29 15:49:54 -05:00
Robert Maynard
1bfcce19dd VTK-m builds with separate function sections to allow smaller binaries
Consumers of VTK-m when enabling of dropping of unused functions
will see VTK-m functions dropped. Previously this didn't happen
as VTK-m didn't build object files with the correct flags for this.

By allowing the linker to remove unused symbols we see a significant
saving the file size of VTK-m tests, examples, and benchmarks.
An OpenMP build of the tests and benchmarks goes from 168MB to
141MB which is roughly a 16% filesize reduction.

Initially I had presumed that these changes would increase link times.
But in measurements the total wall time for compilation of VTK-m has
stayed about the same ( seeing a decrease of 1.5% ). Presumably the
increased computation is offset by the reduction in file writing.
2019-09-11 13:34:25 -04:00
Robert Maynard
e37c2061cf vtkm_add_target_information now supports multiple targets
Instead of having to be called for each target you can now
pass multiple targets at once. Do note that if you pass multiple
targets you will need to pass all the sources from those targets
that need to be 'device' compiled.
2019-09-11 09:17:52 -04:00
Robert Maynard
a65afa11ba Export CUDA static library requirements properly
This is a work around while we wait on requiring CMake 3.15 for all
cuda builds. At that point we can replace this with setting
`requires_static_builds` as part of the EXPORT_PROPERTIES of the
vtkm_cuda target.

This has been tested with the ascent proxy
2019-08-27 13:34:49 -04:00
Robert Maynard
6b0614e577 EXTEND_VTKM used to determine consumers by vtkm_add_target_information
The EXTEND_VTKM is now checked to determine when a shared library
consumer of VTK-m is allowed.
2019-08-27 13:32:29 -04:00
Robert Maynard
3c1339504f Another turn on the wheel to get VTK-m to export CUDA flags
This is a work around while we wait on requiring CMake 3.15 for all
cuda builds. At that point we can replace this with setting
`cuda_architecture_flags` as part of the EXPORT_PROPERTIES of the
vtkm_cuda target.

This has been tested with the ascent proxy
2019-08-26 16:54:43 -04:00
Robert Maynard
ea50e82aac Move VTK-m CMake testing wrappers to the testing folder
The VTK-m testing infrastructure isn't public facing so it doesn't
need to be installed or clutter the main VTKmWrappers file.

At the same time I have refactored the code to make it clearer
to understand, and remove unused options.
2019-07-09 13:32:23 -04:00
Robert Maynard
0b7dd7c38e Add CMake vtkm_add_target_information() to make using vtk-m easier
The function allows consumers to modify an existing target to allow
for correct compilation with VTK-m.
2019-07-09 13:32:23 -04:00
Robert Maynard
e934e2273c vtkm_library WRAP_FOR_CUDA renamed to clarify the intent of the property
We want the option name to be clear that it might be applicable for
more than just CUDA. If VTK-m ever supported something like SYCL
it would not be clear that those sources should go in `WRAP_FOR_CUDA`.
2019-07-09 13:04:07 -04:00
Robert Maynard
a2e6660fdd Remove unused vtkm_compile_as_cuda CMake function 2019-07-09 13:04:07 -04:00
Robert Maynard
65f169b311 VTK-m now will now error when mixing CUDA and shared builds 2019-07-09 11:48:22 -04:00
Robert Maynard
fb6235e0e9 VTK-m and DIY now properly export MPI requirements.
Previously an installed version of VTK-m wasn't relocatable as
it had system MPI paths. Additionally the installed vtkm_diy target
would depend on MPI but not `find_package(MPI)`
2019-06-24 14:48:01 -04:00
Robert Maynard
e298e05bc9 Test will now fail if programs such as UBSAN output "runtime error" 2019-06-18 13:53:32 -04:00
Robert Maynard
b43d615334 Make VTK-m use consistent symbol visibility for tests. 2019-06-17 15:19:17 -04:00
Robert Maynard
ff687016ee For VTK-m libs all includes of DeviceAdapterTagCuda happen from cuda files
It is very easy to cause ODR violations with DeviceAdapterTagCuda.
If you include that header from a C++ file and a CUDA file inside
the same program we an ODR violation. The reasons is that the C++
versions will say the tag is invalid, and the CUDA will say the
tag is valid.

The solution to this is that any compilation unit that includes
DeviceAdapterTagCuda from a version of VTK-m that has CUDA enabled
must be invoked by the cuda compiler.
2019-04-22 10:39:54 -04:00
nadavi
fbcea82e78 conslidate the license statement 2019-04-17 10:57:13 -06:00
Robert Maynard
001d1b0f47 VTK-m can now build and test against temporary installed vtkm.
We now have a couple of the examples also being built against
the installed version of VTK-m as a test. This allow us to verify
that VTK-m installs and can be found properly.
2019-04-03 18:08:56 -04:00
Allison Vacanti
04a464cc4b Update cuda detection to create vtkm::cuda as an interface library. 2019-03-26 14:53:42 -04:00
Robert Maynard
24e71d251b VTK-m yet again has properly installed headers.
Fixes the install issues mentioned in #342
2019-01-24 14:26:40 -05:00
Robert Maynard
4ec5bae02d Remove VTK-m TestBuild infrastructure
The purpose of the TestBuild infrastructure was to confirm that
VTK-m didn't have any lexical issues when it was a pure header
only project. As we now move to have more compiled components
the need for this form of testing is mitigated. Combined
with the issue of TestBuilds causing MSVC issues, we should
just remove this infrastructure.
2019-01-16 10:04:33 -06:00