Commit Graph

59 Commits

Author SHA1 Message Date
Robert Maynard a3cafa4237 compile_features: Ignore features that map to languages that aren't enabled
Remove the Cuda/ConsumeCompileFeatures test as it only existed to
validate that using `cxx_std_XY` would cause the paired language (CUDA) to also build in mode XY.
2021-06-25 13:39:50 -04:00
Robert Maynard cd89d1c328 FindCUDAToolkit: Robust version checks when CUDA lang is not enabled
Previously if you set `CMAKE_CUDA_COMPILER` but hadn't enabled
the CUDA language, FindCUDAToolkit would not correctly compute
the version information.
2021-02-09 09:39:20 -05:00
Raul Tambre c63fe01835 CUDA: Clang separable compilation
For NVCC the compiler takes care of device linking when passed the "-dlink"
flag.
Clang doesn't support such magic and requires the buildsystem to do the work
that NVCC does behind the scenes.

The implementation is based on Bazel's device linking documentation:
https://github.com/tensorflow/tensorflow/blob/7cabcdf073abad8c46e9dda62bb8fa4682d2061e/third_party/nccl/build_defs.bzl.tpl#L259

Closes: #20726
2020-09-24 15:19:54 -04:00
Raul Tambre 1cd4a37c12 Tests: Use sm_35 in Cuda.ProperDeviceLibraries for CUDA <10.0
Using the cublas device libraries seems to require at least sm_35.
Set the architecture explicitly to sm_35 for old CUDA versions, which still
have the cublas device library.
2020-09-23 21:29:21 +03:00
Raul Tambre 4fe9f534f5 Tests: Don't unnecessarily set CUDA_ARCHITECTURES
Architecture 30 was removed with CUDA 11, so most of the CUDA tests fail with
it.
Remove setting the architecture and bump the minimum version to 3.18, so
CMP0104 takes effect and we can rely on the default architecture, which is
guaranteed to be compilable.

Use of __ldg() in ProperLinkFlags was removed as it only affects performance
and is available only on sm_35 and above.

Testing the functionality of CUDA_ARCHITECTURES is already covered by
CudaOnly.Architecture and CudaOnly.CompileFlags.
2020-09-21 20:37:07 +03:00
Jean-Christophe Fillion-Robin 207373802e Fix typos identified using codespell
See https://github.com/codespell-project/codespell#readme

The following command was used:

```
codespell -q6 --skip="\
.git,\
*.json,\
./Copyright.txt,\
./Help/command/foreach.rst,\
./Help/prop_test/REQUIRED_FILES.rst,\
./Help/variable/CTEST_COVERAGE_COMMAND.rst,\
./Modules/CMakeCheckCompilerFlagCommonPatterns.cmake,\
./Modules/CMakeRCInformation.cmake,\
./Modules/Internal/CPack/NSIS.template.in,\
./Modules/FindMatlab.cmake,\
./Modules/MatlabTestsRedirect.cmake,\
./Modules/Platform/Windows-Clang.cmake,\
./Modules/Platform/Windows-Intel-Fortran.cmake,\
./Modules/Platform/Windows-MSVC.cmake,\
./Source/CMakeVersion.cmake,\
./Source/cmConvertMSBuildXMLToJSON.py,\
./Source/cmCreateTestSourceList.cxx,\
./Source/cmGlobalVisualStudio10Generator.cxx,\
./Source/cmExportBuildFileGenerator.cxx,\
./Source/cmExportInstallAndroidMKGenerator.cxx,\
./Source/cmExportInstallFileGenerator.cxx,\
./Source/cmExportSet.cxx,\
./Source/cmExportTryCompileFileGenerator.cxx,\
./Source/cmFindPackageCommand.cxx,\
./Source/cmInstallCommand.cxx,\
./Source/cmGeneratorExpressionLexer.cxx,\
./Source/cmLocalVisualStudio7Generator.cxx,\
./Source/cmOrderDirectories.cxx,\
./Source/cmTarget.cxx,\
./Source/kwsys/*,\
./Source/QtDialog/CMakeSetupDialog.ui,\
./Source/CPack/WiX/cmWIXRichTextFormatWriter.cxx,\
./Source/CTest/cmParseCoberturaCoverage.h,\
./Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in,\
./Tests/RunCMake/CPack/tests/DMG_SLA/English.license.rtf,\
./Tests/RunCMake/CPack/tests/DMG_SLA/German.license.txt,\
./Tests/RunCMake/CPack/tests/DMG_SLA/German.menu.txt,\
./Tests/RunCMake/GoogleTest/xml_output.cpp,\
./Tests/RunCMake/Make/TargetMessages*,\
./Utilities/*,\
" \
-L "\
dependees,\
endwhile,\
fo,\
filetest,\
helpfull,\
nd,\
objext,\
stoll,\
supercedes,\
superceded,\
vas,\
varn,\
"
```
2020-07-22 12:44:47 -04:00
Robert Maynard b284a3c764 CudaToolkit: Update for new/removed libraries in CUDA 11 2020-06-18 08:52:58 -04:00
Ben Boeckel 1a2961b895 Tests: add CUDA labels to tests which are affected by CUDA 2020-06-11 13:04:33 -04:00
Brad King 4c7cc264af Tests: Restore NVCC-specific CUDA tests
In commit a653ca9504 (Tests: Update CUDA tests to work with Clang,
2020-03-27) some tests were conditioned using `CMAKE_CUDA_COMPILER_ID`.
That is not defined when configuring CMake itself, so it accidentally
turned off NVCC-specific CUDA tests altogether.  Convert the conditions
to check `CMake_TEST_CUDA` for `Clang` instead.  That option is added
explicitly to builds where we want the tests to run, so we can set it to
a value indicating the CUDA compiler vendor.

In commit a653ca9504 (Tests: Update CUDA tests to work with Clang,
2020-03-27) the NVCC-specific `CudaOnly.GPUDebugFlag` test was
accidentally broken by removing a space when appending `-G` to the CUDA
flags.  This was covered by the test not running.  Restore the space.

Fixes: #20727
2020-05-20 10:48:20 -04:00
Raul Tambre a653ca9504 Tests: Update CUDA tests to work with Clang 2020-05-15 18:12:39 +03:00
Raul Tambre f0931b0790 CUDA: Convert tests to use CUDA_ARCHITECTURES 2020-04-15 17:55:41 +03:00
Robert Maynard 0d0145138f CUDA: Add abstraction for cuda runtime selection
Fixes #17559
Replace our hard-coded default of cudart=static with a first-class abstraction to select the runtime library from an enumeration of logical names.
2020-01-27 16:02:26 -05:00
Brad King 9f1ce93d92 Merge topic 'add_cuda_toolkit_tests'
6e474364d1 CUDAToolkit: No targets now depend on the CUDA runtime
907bb7df57 CUDAToolkit: Gracefully handle missing SDK components
e500eb80cd CUDAToolkit: add_cuda_link_dependency correctly sets dependencies

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4183
2020-01-15 13:40:07 -05:00
Robert Maynard 6e474364d1 CUDAToolkit: No targets now depend on the CUDA runtime
It is not a requirement to have shared|static consistent across your
CUDA libraries (e.g curand, nppc ) and your CUDA runtime library.
It is entirely allowable to use a static nppc and a shared runtime.
2020-01-14 13:50:37 -05:00
Brad King 01c90d76a1 Merge branch 'backport-3.16-cuda-device-link-only-cuda' 2020-01-09 11:21:09 -05:00
Brad King 7ffa42288e Merge branch 'backport-3.15-cuda-device-link-only-cuda' 2020-01-09 11:13:51 -05:00
Robert Maynard 071c4f1a2a CUDA: Do not device link if target has no CUDA usage
When CUDA is enabled, and a pure non-CUDA target has
CMAKE_CUDA_SEPARABLE_COMPILATION enabled, don't actually perform
the device linking step, as it will fail. A target that has
CMAKE_CUDA_SEPARABLE_COMPILATION enabled must also have CUDA
usage (either itself, or something it links to).

Fixes: #20182
2020-01-09 11:02:17 -05:00
Robert Maynard d484a3c4d8 FindCUDAToolkit: correct searches for Toolkit components 2019-12-16 14:35:03 -05:00
Robert Maynard e2a5d8374f FindCUDAToolkit: Improve usage, library set, and tests
Refined the initial design of FindCUDAToolkit and improve it
by adding more library support, more toolkit information and
tests.
2019-12-16 11:15:12 -05:00
Robert Maynard 2467a2b318 CUDA: Add cuda meta-features (e.g. `cuda_std_11`) support 2019-12-10 17:56:48 -05:00
Kitware Robot ed98209ddc Revise include order using clang-format-6.0
Run the `clang-format.bash` script to update our C and C++ code to a new
include order `.clang-format`.  Use `clang-format` version 6.0.
2019-10-01 12:26:36 -04:00
Robert Maynard a4d502a5bf CUDA: Do not device link if CUDA is not an enabled language
Checks added in commit 81b4d10d8f (CUDA: More exhaustive checks to
determine when to do device linking, 2019-05-09, v3.15.0-rc1~82^2)
assumed that CUDA properties would be set only if CUDA is enabled.

We cannot do a device link step if we do not have the CUDA language
enabled.  This was discovered as some projects unconditionally set CUDA
properties such as `CUDA_RESOLVE_DEVICE_SYMBOLS` even when the CUDA
language has not been enabled.

Fixes: #19432
2019-07-01 08:29:10 -04:00
Robert Maynard 2cc050b53b CUDA: Add test for device linking when host linking uses threads
Convert the `CudaOnly.LinkSystemDeviceLibraries` test to a new
`Cuda.ProperDeviceLibraries` test.  The former covered only the
`cublas_device` library which is removed by CUDA 10.  Extend the new
test to also cover various cases of using threads.

Issue: #18008
2018-10-24 10:15:48 -04:00
Brad King fb378fc4d7 Tests: Fix Cuda test project names
Make them match what `ADD_TEST_MACRO` gives to ctest as the
project name to build so that the `.sln` file will be found.
2018-10-10 13:29:47 -04:00
Kitware Robot d7204e649e Revise C++ coding style using clang-format-6.0
Run the `clang-format.bash` script to update all our C and C++ code to a
new style defined by `.clang-format`.  Use `clang-format` version 6.0.

* If you reached this commit for a line in `git blame`, re-run the blame
  operation starting at the parent of this commit to see older history
  for the content.

* See the parent commit for instructions to rebase a change across this
  style transition commit.
2018-06-01 09:53:42 -04:00
Robert Maynard fa583869f7 CUDA: Use MSVC default pattern for naming object files
The default that CUDA uses causes failures when you try to embed
CUDA obj's into another target.
2018-01-30 09:14:02 -05:00
Luz Paz 3ab7bf8285 Various typo fixes
Some are user-facing. Others are source comments.
2018-01-04 06:52:01 +11:00
Robert Maynard 4b7618d170 CUDA: Fix CUDA_STANDARD selection via cxx_std_11 with CXX_STANDARD
When C++ features require a certain C++/CUDA level, verify or update the
standard level target property for each language independently.

While at it, add missing rejection of invalid `CUDA_STANDARD` property
values.

Co-Author: Brad King <brad.king@kitware.com>
Fixes: #17519
2017-12-15 10:29:20 -05:00
Daniel Pfeifer 2b4c32c95f clang-format: format all code as Cpp11 2017-08-30 11:07:05 -04:00
Brad King fff782f6a6 Tests: Simplify CUDA rpath on macOS
Use the `BUILD_RPATH` property and reference the CMake-computed location
of the runtime libraries.
2017-06-21 10:41:49 -04:00
Robert Maynard a36fb229ba CUDA: Visual Studio now properly delays device linking 2017-04-26 11:41:22 -04:00
Robert Maynard d40fc8856d CUDA: ObjectLibrary test executable now runs on OSX 2017-03-23 09:44:30 -04:00
Brad King d1530cc9a5 Merge topic 'cuda-msvc-flags'
55fb46d2 CUDA: Fix default compiler flags on Windows
d7c80f60 CUDA: Fix test cases to not override CUDA flags
2017-02-16 13:15:35 -05:00
Brad King d7c80f6036 CUDA: Fix test cases to not override CUDA flags
Append to `CMAKE_CUDA_FLAGS` instead of overwriting it.
2017-02-15 11:12:09 -05:00
Brad King e853dfed6a Merge topic 'cuda-with-c'
1c60231c CUDA: Link to standard system libraries when linking as CUDA
8d75d8dc Tests: Add case for CUDA with C but not C++
2017-02-15 08:24:05 -05:00
Brad King 1c60231ca5 CUDA: Link to standard system libraries when linking as CUDA
On Windows with MSVC-like host compilers we must honor the standard
libraries chosen by the `Platform/Windows-MSVC` module.  Otherwise C
code linked into the CUDA binary that expects to have these libraries
available may not link.
2017-02-14 10:34:15 -05:00
Brad King 8d75d8dc72 Tests: Add case for CUDA with C but not C++
An executable using CUDA and C should link as CUDA.
2017-02-14 10:34:06 -05:00
Brad King 33a65941fa Tests: Run clang-format on CUDA code 2017-02-14 10:21:48 -05:00
Brad King fa5188d0ed Merge branch 'backport-clang-format-cuda' into clang-format-cuda 2017-02-14 10:21:22 -05:00
Brad King c4a6135039 Tests: Run clang-format on CUDA code 2017-02-14 10:20:50 -05:00
Brad King 592e3d2f96 clang-format.bash: Format CUDA source files too
Add `.clang-format` configuration files for Cuda test directories that
use `Standard: Cpp11`.  Otherwise clang-format splits the triple angle
brackets used for CUDA kernels.
2017-02-14 10:20:23 -05:00
Brad King b7d8d80a62 Merge topic 'cmake_provide_include_dir_for_toolkit'
44f3acb2 CUDA: Detect the toolkit include directories
2017-02-14 08:30:30 -05:00
Robert Maynard 44f3acb202 CUDA: Detect the toolkit include directories
The `nvcc -v` output provides what include directories need to be added
to use the CUDA toolkit from other languages ( C/C++ ).
2017-02-10 16:08:06 -05:00
Pierre Moreau 166b339387 Tests/Cuda: Select a CUDA device supporting compute 3.0 2017-02-10 13:47:05 -05:00
Pierre Moreau cbe4d5957b Tests/Cuda: Return a non-zero code if errors occurred 2017-02-10 13:46:42 -05:00
Pierre Moreau 8731701cb6 Tests/Cuda: Use memory allocated on the GPU in the kernels 2017-02-10 13:46:08 -05:00
Pierre Moreau 0ae5386aa9 Tests/Cuda: Add missing separable compilation property
This resulted in `mixed_kernel()` returning an "invalid device function"
at runtime for `file1_func()`.

Suggested-by: Robert Maynard
2017-02-10 13:46:08 -05:00
Pierre Moreau ce19607fed Tests/Cuda: Fix missing CUDA static library at runtime on macOS
Suggested-by: Robert Maynard
2017-02-10 13:46:07 -05:00
Pierre Moreau 008ed80dcf Tests/Cuda: Output error messages to std::cerr instead of std::cout 2017-02-10 13:46:07 -05:00
Pierre Moreau c0d7bb8368 Tests/Cuda: Print asynchronous error messages, if any
As kernel launches are asynchronous, a `cudaGetLastError()` right after
the kernel launch might be executed while the kernel is still running.
Synchronizing the device will ensure that all the work is completed
before progressing further on, and allows to catch errors that were
previously missed.
The `cudaGetLastError()` after the `cudaDeviceSynchronize()` is there
to reset the error variable to `cudaSuccess`.
2017-02-10 13:46:07 -05:00